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)
,因为您将捕获组放在了另一个捕获组中。