我有一个数据字段文件,其中可能包含注释,如下所示:
id, data, data, data
101 a, b, c
102 d, e, f
103 g, h, i // has to do with 101 a, b, c
104 j, k, l
//105 m, n, o
// 106 p, q, r正如您在上面的第一个注释中所看到的,有对匹配模式的直接引用。现在,我想捕获103,这是三个数据字段,但我不想捕捉注释中的内容。
我尝试了负面的查找,以排除105和106,但我不能想出一个正则表达式来捕捉两者。
(?<!//)(\b\d+\b),\s(data),\s(data),\s(data)这将捕获除105之外的所有捕获,但要指定
(?<!//\s*) or (?<!//.*)当我试图排除带有任何空格或字符的注释时,我的整个regex就无效了。
我有一种感觉,我需要巧妙地使用锚,或者我需要在捕获组中包装我想要的东西,并在我的后面引用它(就像使用$1)。
如果这是另一种“正则表达式不支持递归”的情况,因为它是一种正则语言(一种自动机理论),请指出这一点。
是否可以使用正则表达式排除103、105和106行的注释?如果是这样的话,是怎么做的?
发布于 2011-07-21 07:22:13
您可以简单地将正则表达式锚定在行的开头:
(?m)^(\d+),\s(\S+),\s(\S+),\s(\S+)发布于 2011-07-21 07:20:26
在我看来,您可以将表达式锚定在行的开头(以获取所有数据):
^(\d+),\s(data),\s(data),\s(data)\s*(?://|$)或者您可以使用适当的CSV解析器来处理注释。
发布于 2020-04-10 07:19:12
我刚才在带有regex的文本编辑器中使用的另一种方法是,当您没有regex的前瞻/后面的特性时,只需使用以下序列:
^[^\r\n/]*(/[^/])?[^\r\n/]*(/[^/])?my_search_sequence它将忽略由非/字符分裂的/序列最多2条。如果您想要更多,那么只需添加更多:
^[^\r\n/]*(/[^/])?[^\r\n/]*(/[^/])?[^\r\n/]*(/[^/])my_search_sequence诸若此类。
搜索词在序列后面的概率会随着正则表达式的长度而减小。
https://stackoverflow.com/questions/6772447
复制相似问题