Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python2.7中编写正则表达式,以返回字符串中的两个单词,并在它们之间加下划线_Python_Regex_String - Fatal编程技术网

如何在Python2.7中编写正则表达式,以返回字符串中的两个单词,并在它们之间加下划线

如何在Python2.7中编写正则表达式,以返回字符串中的两个单词,并在它们之间加下划线,python,regex,string,Python,Regex,String,我有与此示例一致的字符串: >>> s = "plant yard !!@ blah HELLO OS=puffin_CuteDeer_cat_anteater" 每个字符串都有“OS=”表达式,其后半部分由下划线链接的单词组成。字符串的第一部分直到“OS=”为止,由下划线链接的实际单词在字符串中有所不同 我想用're'模块编写一个正则表达式,忽略字符串的第一部分直到模式部分,然后返回模式中的前两个单词,并在它们之间保持下划线 我想: >>> 'puffin

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

>>> 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(”(?您可以尝试以下方法:

import re
s = "plant yard !!@ blah HELLO OS=puffin_CuteDeer_cat_anteater"
s = re.findall('(?<=OS\=)[a-zA-Z]+_[a-zA-Z]+', s)[0]

下面使用捕获组
(…)
和否定
[^…]
来获取所需的部分:

>>> re.search(r'OS=([^_]+_[^_]+)', s).group(1)
'puffin_CuteDeer'
你可以做:

(?<=OS=)[^_]+_[^_]+

可能不需要正则表达式:

s = "plant yard !!@ blah HELLO OS=puffin_CuteDeer_cat_anteater"

right_side = s.split("=")[-1]
"_".join(right_side.split("_")[:2])
# 'puffin_CuteDeer'

哦,这很好用。非常感谢!现在我知道了如何为模式开发正确的表达式,我想也许\w可以替换[a-zA-Z]。我也会研究一下。再次感谢!@17thlvl植物学家很乐意帮忙!但是,您不想替换
[a-zA-Z]
\w
匹配,因为后者将与
\u
匹配,因此
\w+
在最后,在这种情况下,将找到
河豚肉切食者
,这不是所需的输出。非常感谢您提供此选项。我认为这比re.findall更有效,因为我不需要生成列表。谢谢您的支持您对[^…]的善意解释。从文档中我无法理解。@17thlvl植物学家没问题:)谢谢。实际情况稍微复杂一点,我想避免列表的构建。我将把这一事实添加到原始问题中。是的,这就是为什么我认为Schwobasegll和heemayl提出的选项最终更适合我的目的。与@heemayl一样,我非常感谢这个答案和对t的解释他[^…]表达了自己的观点。
(?<=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'
s = "plant yard !!@ blah HELLO OS=puffin_CuteDeer_cat_anteater"

right_side = s.split("=")[-1]
"_".join(right_side.split("_")[:2])
# 'puffin_CuteDeer'