Regex 正则表达式将模式或空字符串分组为&引用;

Regex 正则表达式将模式或空字符串分组为&引用;,regex,python-3.x,Regex,Python 3.x,我将Python3.3.2与正则表达式一起使用。我有一个非常简单的函数 def DoRegexThings(somestring): m = re.match(r'(^\d+)( .*$)?', somestring) return m.group(1) 我使用它只获取字符串开头的数字部分,并丢弃其余部分。但是,如果字符串为空,它将失败,因为它无法匹配组 我已经查看了之前的问题,并将正则表达式更改为: (^$)|(^\d+)( .*$)? 但它只会使它每次返回“None”,在

我将Python3.3.2与正则表达式一起使用。我有一个非常简单的函数

def DoRegexThings(somestring):
    m = re.match(r'(^\d+)( .*$)?', somestring)
    return m.group(1)
我使用它只获取字符串开头的数字部分,并丢弃其余部分。但是,如果字符串为空,它将失败,因为它无法匹配组

我已经查看了之前的问题,并将正则表达式更改为:

(^$)|(^\d+)( .*$)?
但它只会使它每次返回
“None”
,在空字符串上仍然失败。我真正想要的是一个正则表达式,我可以使用它获取记录的数字部分,例如,如果记录是
1234sometext
,我只想要
1234
,或者如果字符串是空的,我想要
m.group(1)
返回空字符串。我现在的解决办法是

m = re.match(r'(^\d+)( .*$)?', somestring)
if m == None: # Handle empty string case
    return somestring
else:
    return m.group(1)

但是如果我可以避免检查匹配对象的
None
,我愿意。有什么办法可以做到这一点吗?

我觉得你把这件事弄得太复杂了:

re.match(r"\d*", somestring).group()
如果数字位于字符串的开头(
.match()
确保这一点),则返回一个数字;如果没有数字,则返回空字符串

>>> import re
>>> somestring = "987kjh"
>>> re.match(r"\d*", somestring).group()
'987'
>>> somestring = "kjh"
>>> re.match(r"\d*", somestring).group()
''

(^$)|(^\d+)(.*$)?
将“起作用”,即使对于空字符串也是如此,但当然,数字(如果匹配)现在将位于组2而不是组1中,因为您已在其前面添加了另一个捕获组(将匹配空字符串)。此外,如果需要与
无进行比较,请,使用
如果m为None:
而不是
如果m==None:
,但是在这种情况下,
如果不是m:
将是首选的解决方案-但是您不需要它(请参见我的答案)。这正是我所需要的,而且比我当时的方式要好得多。非常感谢。