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