我正在使用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
的匹配对象,我想。有没有办法实现这个目标?
答案 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()
''