正则表达式将模式或组空字符串分组为“”

时间:2014-05-02 16:20:48

标签: regex python-3.x

我正在使用Python 3.3.2和正则表达式。我有一个非常简单的功能

def DoRegexThings(somestring):
    m = re.match(r'(^\d+)( .*$)?', somestring)
    return m.group(1)

我正在使用它来获取字符串开头的数字部分,并丢弃其余部分。但是,它在空字符串的情况下失败,因为它无法匹配组。

我看过之前被问过的this similar question,并将我的正则表达式更改为:

(^$)|(^\d+)( .*$)?

但它只会导致它每次返回"None",并且仍然在空字符串上失败。我真正想要的是一个正则表达式,我可以使用它来获取我的记录的数字部分,例如如果记录是1234 sometext,我只想要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的匹配对象,我想。有没有办法实现这个目标?

1 个答案:

答案 0 :(得分:1)

我认为你让这个过于复杂:

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()
''