【发布时间】:2020-05-03 08:51:33
【问题描述】:
给定以下; 分隔字符串:
a;; z
toy;d;hh
z;
d;23
;;io;
b y;b;12
a;b;bb;;;34
我希望获得第一列不是d、b y 或toy 的任何行的第三列(如果存在)。
所以想要的结果是
z
io
bb
到目前为止我有这个正则表达式:
^(?!(d|b y|toy);([^;\r\n]*);([^;\r\n]*)).*\R
如图所示demo
在我看来至少有两个问题:
第一列中包含d的第5行是匹配的,它不应该
匹配没有返回分组
任何帮助将不胜感激
【问题讨论】:
-
你想要
^(?:(?!(?:d|b y|toy);)([^\r\n;]*)(?:;([^\r\n;]*))?(?:;([^\r\n;]*))?.*|.*)吗?见demo。 -
谢谢@WiktorStribiżew 请看一下这个demo 我在字符串
toy中添加了第四行并用$1替换。现在正在返回此toy行,因为它不包括您编写的正则表达式中的;。我试图将;放在负前瞻之外,但没有成功。任何建议。 -
如果您不需要检查 Col1 的确切值,您可以删除
;。见regex101.com/r/3E5eQl/2 -
如果这回答了您的问题,请告诉我,以便我发布并解释解决方案。否则,如果您需要更多帮助,请告知。
-
谢谢@WiktorStribiżew 我需要更多帮助,如果有一个解释会很好。我现在更改了正则表达式来测试 Col2 here。按照您的模型,我试图将
;包含在该组中,正如您在第三组(?:;([^\r\n;]*))?中所写的那样。所以我认为第 2 组应该是(?:;(?!(?:23|b))([^\r\n;]*))之类的东西,但这不会捕获测试字符串toy中第 4 行中的第一组。这里有任何建议。
标签: regex pcre regex-lookarounds