python - 如何在 Python 2.7 中编写正则表达式以返回字符串中的两个单词,并在它们之间使用下划线

标签 python regex string

我有与此示例一致的字符串:

>>> 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/

相关文章:

regex - 与正则表达式中的开始/结束对字符匹配

string - 列表[字符串] -> 矢量[矢量[字符]]

python - 如果列表中的任何字符串匹配正则表达式

python - 如何从节点列表中获取对应的边

python - 将 Pandas 日期列转换为经过的秒数

python - 列出所有可能的随机 3 个字符或 4 个字符

java - 创建新数组

使用配置文件记录 Python 3.2 导致 KeyError : 'formatters' on Raspbian

python - 根据分隔符的多次出现分割文件

java - 用于在 Eclipse 中查找并用 ArrayList<> 替换所有 ArrayList<something> 的正则表达式