【发布时间】:2014-05-02 16:20:47
【问题描述】:
我正在使用带有正则表达式的 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,我愿意。有没有办法做到这一点?
【问题讨论】:
-
(^$)|(^\d+)( .*$)?将“工作”,即使对于空字符串,但当然数字(如果匹配)现在将在第 2 组而不是第 1 组中,因为您添加了另一个捕获组(即将匹配它之前的空字符串)。 -
另外,如果您需要与
None进行比较,请使用if m is None:而不是if m == None:,但在这种情况下,if not m:将是首选解决方案- 但是,您不需要(请参阅我的回答)。
标签: regex python-3.x