正则表达式在特定模式之前获取最后一个分隔符

时间:2012-11-03 07:59:37

标签: regex

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

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

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

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

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

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

3 个答案:

答案 0 :(得分:1)

使用此正则表达式

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

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

答案 1 :(得分:1)

;(?=[^;]*XYZ)

匹配字符串的同一段内的XYZ之后的分号。

使用它一次查找第一次出现。如果您反复使用它,您也会发现以下情况。

答案 2 :(得分:0)

您可以分两步完成:

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

即,

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