编程语言
首页 > 编程语言> > Python Regex布尔值“或”未选择所有匹配项

Python Regex布尔值“或”未选择所有匹配项

作者:互联网

我正在尝试匹配字符串中的多个子字符串.

感兴趣的区域的格式为:

Sample1: "text text text[One]"
Sample2:"text text text[One/Two]"
Sample3:"text text text[One/Two/Three]"

我正在尝试通过正则表达式以下列方式获取数字列表:

numbers = re.findall('(\[|\/)(\w+)(\/|\])', str)

但是,group2产生:

#Sample1
['One']
#Sample2
['One']
#Sample3
['One','Three']

无论如何,我都无法匹配“ /”与“]”或“ /”之间的第二个数字.但是,我不明白为什么它不匹配“ / Two /”,因为“ /”字符在两种选择中都是一个选项.

我还尝试了以下正则表达式以不同的方式对其进行构架:

re.findall('[\[]?[\/]?(\w+)[\/]?[\]]?', str)

尽管它给了我理想的结果,但它也给了我前面文本中的所有单词.

任何建议表示赞赏.

解决方法:

使用lookbehind和lookahead,因此[,/和]不属于匹配项:

>>> [re.findall('(?<=\[|\/)\w+(?=\/|\])', s) for s in samples]
[['One'], ['One', 'Two'], ['One', 'Two', 'Three']]

这样,中间/可以用于两次匹配.

标签:boolean-logic,python,regex
来源: https://codeday.me/bug/20191025/1929835.html