Hol*_*rel 1 python regex string
我需要捕捉标记,如11,12- -13和14-15
我希望拒绝任何包含上面未指定的无效令牌的字符串,例如12--和.4-5-6
这些字符串可以由任意数量的空格分隔,这些空格可能包含也可能不包含单个彗差.所以对于字符串:
43,5 67- -66,53-53 , 6
我想回来
('43', '5', '67-', '-66', '53-53', '6')
Run Code Online (Sandbox Code Playgroud)
这是我尝试过的:
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())
Run Code Online (Sandbox Code Playgroud)
但它只打印第一个和最后一个数字:
('43', '6')
Run Code Online (Sandbox Code Playgroud)
任何帮助是极大的赞赏.
用途re.findall:
>>> re.findall(r'[-\d]+', '43,5 67- -66,53-53 , 6')
['43', '5', '67-', '-66', '53-53', '6']
Run Code Online (Sandbox Code Playgroud)
UPDATE
使用否定的外观断言来排除无效匹配.
>>> pattern = r'(?<![-\d])(\d+-\d+|-\d+|\d+-|\d+)(?![-\d])'
>>> re.findall(pattern, '43,5 67- -66,53-53 , 1--, 2, --3, -4-')
['43', '5', '67-', '-66', '53-53', '2']
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
134 次 |
| 最近记录: |