【发布时间】:2022-07-20 20:39:57
【问题描述】:
如下图有4个字符串
ABC_FIXED_20220720_VALUEABC.csv
ABC_FIXED_20220720_VALUEABCQUERY_answer.csv
ABC_FIXED_20220720_VALUEDEF.csv
ABC_FIXED_20220720_VALUEDEFQUERY_answer.csv
根据匹配的子字符串值(上面显示的字符串中的 VALUEABC、VALUEDEF)将两个字符串视为匹配。因此,我希望匹配前 2 个(具有 VALUEABC),然后匹配下一个 2(具有 VALUEDEF)。根据为一个正则表达式组返回的相同值来识别匹配的字符串。
到目前为止我尝试了什么
ABC.*[0-9]{8}_(.*[^QUERY_answer])(?:QUERY_answer)?.csv
这将为前 2 个字符串返回正则表达式 group-1(来自 (.*[^QUERY_answer]))值“VALUEABC”,为接下来的 2 个字符串返回“VALUEDEF”,从而实现所需的匹配。
但上述正则表达式的问题在于,只要值以“QUERY_answer”的任何字符结尾,正则表达式就不会匹配分组的任何值。例如,以下 2 个字符串根本不匹配,因为 VALUESTU 以“U”结尾:
ABC_FIXED_20220720_VALUESTU.csv
ABC_FIXED_20220720_VALUESTUQUERY_answer.csv
我尝试使用 Negative Lookahead:
ABC.*[0-9]{8}_(.*(?!QUERY_answer))(?:QUERY_answer)?.csv
但在这种情况下,grouping-1 值对于第一个字符串返回为“VALUESTU”,对于第二个字符串返回“VALUESTUQUERY_answer”,从而有效地使这两个字符串不匹配。
有什么方法可以达到所需的匹配?
【问题讨论】: