Python 在不返回开始和结束的情况下匹配中间的字符串
我有以下风格的字符串:Python 在不返回开始和结束的情况下匹配中间的字符串,python,regex,Python,Regex,我有以下风格的字符串: line = '242322342343-gewe|gu_w=23423526,29845903458,3244;tu_w=2234234;' 我想匹配介于gu_w=和之间的元素但赛后我不想要gu_w和将出现在结果中: re.compile(r'gu_w=(.*?);', re.I | re.U) 上述表达式将返回: gu_w=23423526,29845903458,3244; 但是如何让regex返回23423526298459034583244 我在考虑匹配后
line = '242322342343-gewe|gu_w=23423526,29845903458,3244;tu_w=2234234;'
我想匹配介于gu_w=
和之间的元素代码>但赛后我不想要gu_w
和代码>将出现在结果中:
re.compile(r'gu_w=(.*?);', re.I | re.U)
上述表达式将返回:
gu_w=23423526,29845903458,3244;
但是如何让regex返回23423526298459034583244
我在考虑匹配后的结果,但是有更好的方法吗 您必须执行.group(0)
,它将返回整个匹配项。您应该改为访问捕获组1
。这将只返回与(.*)
匹配的文本:
以下摘自:
match.group([group1,…])
返回匹配的一个或多个子组…如果
groupN
参数为零,相应的返回值为整个
匹配字符串;如果它在包含范围[1..99]
中,则它是与相应括号组匹配的字符串
您必须执行.group(0)
,这将返回整个匹配项。您应该改为访问捕获组1
。这将只返回与(.*)
匹配的文本:
以下摘自:
match.group([group1,…])
返回匹配的一个或多个子组…如果
groupN
参数为零,相应的返回值为整个
匹配字符串;如果它在包含范围[1..99]
中,则它是与相应括号组匹配的字符串
此正则表达式:
gu_w=([^;]+)
将在锚之间匹配,但不包括它们
Python演示:
>>> st='242322342343-gewe|gu_w=23423526,29845903458,3244;tu_w=2234234;'
>>> re.search(r'gu_w=([^;]+)', st).group(1)
'23423526,29845903458,3244'
您还可以使用命名的捕获组使您的意图更加明确:
>>> seeking='gu_w'
>>> m=re.search(r'{0}=(?P<{0}>[^;]+)'.format(seeking), st)
>>> m.group(seeking)
'23423526,29845903458,3244'
此正则表达式:
gu_w=([^;]+)
将在锚之间匹配,但不包括它们
Python演示:
>>> st='242322342343-gewe|gu_w=23423526,29845903458,3244;tu_w=2234234;'
>>> re.search(r'gu_w=([^;]+)', st).group(1)
'23423526,29845903458,3244'
您还可以使用命名的捕获组使您的意图更加明确:
>>> seeking='gu_w'
>>> m=re.search(r'{0}=(?P<{0}>[^;]+)'.format(seeking), st)
>>> m.group(seeking)
'23423526,29845903458,3244'
除了iCodez的答案之外,您还可以使用lookarounds来处理边界
re.compile(r"""
(?<=gu_w=) # assert literal gu_w=
.*? # match anything, non-greedily
(?=;) # assert literal ;""", re.I | re.U | re.X)
重新编译(r)
(?除了iCodez的答案,您还可以使用lookarounds来处理边界
re.compile(r"""
(?<=gu_w=) # assert literal gu_w=
.*? # match anything, non-greedily
(?=;) # assert literal ;""", re.I | re.U | re.X)
重新编译(r)
(?shot我确实在做组。@我如何给组命名re.compile(r'(?Pgu_w=(.*)),re.i|re.U)
这将返回整个内容。使用.group(2)
因为您将捕获组放在另一个捕获组中。shot我确实在做组。@我如何给组命名re.compile(r'(?Pgu w=(.*))“,re.I | re.U)
这将返回整个内容。请使用.group(2)
,因为您将捕获组放在了另一个捕获组中。