我有与此示例一致的字符串:
>>> s = "plant yard !!@ blah HELLO OS=puffin_CuteDeer_cat_anteater"
每个字符串都有“OS=”表达式,其后半部分由下划线链接的单词组成。字符串的第一部分到“OS=”以及由下划线链接的实际单词在字符串之间有所不同。
我想使用“re”模块编写一个正则表达式,以忽略字符串的第一部分直到模式部分,然后返回该模式中的前两个单词,并在它们之间保留下划线。
我想要:
>>> 'puffin_CuteDeer'
我可以摆脱第一部分,并且正在接近(我认为)处理模式部分。这是我所拥有的以及它返回的内容:
>>> example = re.search('(?<=OS=)(.*(?=_))',s)
>>> example.group(0)
>>> 'puffin_CuteDeer_cat'
我尝试了很多很多不同的可能性,但没有一个有效。
我很惊讶
>>> example = re.search('(?<=OS=)(.*(?=_){2})',s)
没用。
衷心感谢您的帮助。
更新:我意识到有非正则表达式的方法可以获得所需的输出。然而,由于可能超出问题范围的原因,我认为正则表达式对我来说是最好的选择。
最佳答案
你可以这样做:
(?<=OS=)[^_]+_[^_]+
零宽度正向后查找,
(?<=OS=)
,匹配OS=
[^_]+
匹配直到下一个_
的一个或多个字符,_
匹配文字_
示例:
In [90]: s
Out[90]: 'plant yard !!@ blah HELLO OS=puffin_CuteDeer_cat_anteater'
In [91]: re.search(r'(?<=OS=)[^_]+_[^_]+', s).group()
Out[91]: 'puffin_CuteDeer'
关于python - 如何在 Python 2.7 中编写正则表达式以返回字符串中的两个单词,并在它们之间使用下划线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48290101/