Python regexp用于捕获由空格和逗号分隔的数字和短划线

 Ken張創彬 发布于 2023-02-09 10:36

我需要捕捉标记,如11,12- -1314-15

我希望拒绝任何包含上面未指定的无效令牌的字符串,例如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 个回答
  • 用途re.findall:

    >>> re.findall(r'[-\d]+', '43,5 67- -66,53-53 , 6')
    ['43', '5', '67-', '-66', '53-53', '6']
    

    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']
    

    2023-02-09 10:39 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有