0

获取某个模式之前最后一个分隔符位置的正则表达式是什么?

例如,我有一个字符串如下

some value;some other value;some special XYZ value;some more special XYZ value

在这里,分隔符是分号(“;”),我正在寻找的模式是任何包含“XYZ”的字符串。

正确答案是这种情况是位置 28,它是在包含匹配模式(“XYZ”)的元素之前最后出现的分隔符(“;”)。

正则表达式会是什么样子?

4

3 回答 3

1
;(?=[^;]*XYZ)

XYZ匹配字符串的同一段中后跟的分号。

使用它一次来查找第一个匹配项。如果您反复使用它,您也会发现以下情况。

于 2012-11-03T08:13:01.423 回答
1

使用这个正则表达式

^.*(;).*XYZ.*$

.*(;).*XYZ.*;会贪婪地匹配,即它会匹配到最后一次XYZ跟随它

于 2012-11-03T08:02:56.870 回答
0

您可以分两步完成:

  • 提取包含第一次出现的 XYZ 的最大子字符串,前面有一个分隔符
  • 在该子字符串中找到最后一个分隔符的位置

IE,

s = "some value;some other value;some special XYZ value;some more special XYZ value"
s1 = re.findall("^.*?;.*?XYZ",s)[0]
len(re.findall("(.*;)",s1)[0]) --> 28
于 2012-11-03T08:45:03.953 回答