在某个模式之前获取最后一个分隔符的位置的正则表达式是什么?
例如,我有一个字符串如下
some value;some other value;some special XYZ value;some more special XYZ value
这里,分隔符是分号(“;”),我要查找的模式是包含“XYZ”的任何字符串。
正确的答案是这种情况是位置28,它是包含匹配模式(“XYZ”)的元素之前的分隔符(“;”)的最后一次出现。
正则表达式会是什么样的?
答案 0 :(得分:1)
使用此正则表达式
^.*(;).*XYZ.*$
.*(;).*XYZ.*
会贪婪地匹配,即匹配到;
的最后一次出现XYZ
后跟
答案 1 :(得分:1)
;(?=[^;]*XYZ)
匹配字符串的同一段内的XYZ
之后的分号。
使用它一次查找第一次出现。如果您反复使用它,您也会发现以下情况。
答案 2 :(得分:0)
您可以分两步完成:
即,
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