1
我需要捕获令牌如11
,12-
-13
和14-15
Python的正则表达式来捕获由空格和逗号
我想拒绝包含未如12--
上面指定无效的令牌的任何字符串分隔的数字和连字符和4-5-6
这些可以被任意数量的空间隔开,这些空间可能包含或可能不包含单一的彗形象差。因此,对于字符串:
43,5 67- -66,53-53 , 6
我想返回
('43', '5', '67-', '-66', '53-53', '6')
这是我曾尝试:
import re
num = r'\d{1,4}'
token = r'(?:-%s)|(?:%s-%s)|(?:%s-)|(?:%s)' % (num, num, num, num, num)
sep = r'\s*,?\s*'
valid = r'(%s)(?:%s(%s))*' % (token, sep, token)
test = re.compile(valid)
m = test.match("43,5 67- -66,53-53 , 6")
print(m.groups())
,但只打印第一个和最后一个号码:
('43', '6')
任何帮助,非常感谢。
+1我很震惊... – thefourtheye
很快就回答了这个问题,给我留下了深刻的印象!但是,我也想拒绝无效输入,例如--7和9--6。我会更新我的问题以反映这一点。 –
@HolyMackerel,'-6-'怎么样? – falsetru