Python Regex bool 值 'or' 不选择所有匹配项

标签 python regex boolean-logic

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

兴趣领域的格式为:

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']]

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

关于Python Regex bool 值 'or' 不选择所有匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46936768/

相关文章:

python - pycharm中有没有办法关闭运行窗口并使用键盘快捷键查看编辑器窗口

PHP Regex 验证字母和西类牙口音

javascript - 为什么我的正则表达式没有通过这种情况(包括代码)

python - Python numpy 数组(和 Pandas 索引)中不区分大小写的逻辑

python - 将 Django 模型/类导出到 SQL 语句

python - 从另一个区域连接到 DocumentDB

python - 为什么不应该将版本号固定在 Pipfile 中?

regex - golang正则表达式删除所有空白行

java - 处理多个 boolean 组合

python - Django 根据 bool 字段设置日期