繁体   English   中英

字符之间的python正则表达式匹配

[英]Python regex match between characters

我在python中做一个非常简单的正则表达式,当我使用“或”运算符时看到一些奇怪的行为。

我正在尝试解析以下内容:

>> str = "blah [in brackets] stuff"

这样它就返回:

>> ['blah', 'in brackets', 'stuff']

为了使方括号之间的文本匹配,我使用了“向后看”和“向前看”,即:

>> '(?<=\[).*?(?=\])'

如果单独使用,确实可以捕获括号中的文本:

>> re.findall( '(?<=\[).*?(?=\])' , str )
>> ['in brackets']

但是,当我结合使用or运算符来分析空格之间的字符串时,括号匹配以某种方式分解:

>> [x for x in re.findall( '(?<=\[).*?(?=\])|.*?[, ]' , str ) if x!=' ' ] 
>> ['blah', '[in ', 'brackets] ']

对于我的一生,我无法理解这种行为。 任何帮助,将不胜感激。

谢谢!

你可以做:

>>> s = "blah [in brackets] stuff"

>>> re.findall(r'\b\w+\s*\w+\b', s)
['blah', 'in brackets', 'stuff']

对于那些感兴趣的人,这是我最终获得的成功的正则表达式。 某处可能有一个更优雅的解决方案,但这可行:

>>> s = "blah 2.0 stuff 1 1 0 [in brackets] more stuff [1]"

>>> brackets_re = '(?<=\[).*?(?=\])'
>>> space_re = '[-\.\w]+(?= )'
>>> my_re = brackets_re + '|' + space_re

>>> re.findall(my_re, s)
['blah', '2.0', 'stuff', '1', '1', '0', 'in brackets', 'more', 'stuff', '1']

如果您正在寻找一种简便的方法来进行此操作,请使用此方法。 注意:我将str替换为字符串,因为“ str”是python的内置函数。

import re
string = "blah [in brackets] stuff"
f = re.findall(r'\w+\w', string)
print(f)

输出:['blah','放在括号中,'stuff']

到目前为止,答案没有考虑到括号内可能有两个以上的单词,甚至一个单词。 以下正则表达式将在方括号和方括号的任何前导或尾随空白处分割。 如果字符串中包含更多括号内容,它也将起作用。

s = "blah [in brackets] stuff"

s = re.split(r'\s*\[|\]\s*', s) # note the 'or' operator is used and literal opening and closing brackets '\[' and '\]'

print(s)

输出: ['blah', 'in brackets', 'stuff']

还有一个示例,该示例在方括号内使用带有不同单词数量的字符串,并使用几组方括号:

s = "blah [in brackets] stuff [three words here] more stuff [one-word] stuff [a digit 1!] stuff."

s = re.split(r'\s*\[|\]\s*', s)

print (s)

输出: ['blah', 'in brackets', 'stuff', 'three words here', 'more stuff', 'one-word', 'stuff', 'a digit 1!', 'stuff.']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM