用regex检查字符串中的条件

2024-04-19 12:02:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含两个逗号分隔的数字的字符串;类似于:7878781,20。我想检查第一个数字;如果它以7878开头,第二个数字应该是20,否则逗号后面的第二个数字的长度应该在13到19之间。我想用一行regex;如果可能的话!你知道吗?你知道吗

为了澄清,我想举一些例子;这些线和类似的线应该匹配:

7878454545,20
78858558854545,3245697412356

这些线和类似的线不应匹配:

184848,455
7878787878,45
488455784
4874854848885

我试过^(?:7878\d*,20|\d{13,19})$^7878\d+,20|[\d]{13,19}$;两者在4874854848885上匹配,在87788,12345678912348上不匹配。你知道吗


Tags: 字符串数字例子regex逗号
2条回答

你不必太聪明。用这么简单的方法就能做到:

    m = re.match(r'^(7878\d*,20)|(\d+,\d{13,19})$', s)
    #                ^^^^^^^^^^ ^ ^^^^^^^^^^^^^
    #   if first number starts  o  two numbers, the
    #     with 7878 the second  r  second being between
    #      number should be 20     13 and 19 digits long

考虑到您的测试用例:

import re

ts = [
"7878454545,20",
"78858558854545,3245697412356",
"184848,455",
"7878787878,45",
"488455784",
"4874854848885",
]

for s in ts:
    m = re.match(r'^(7878\d*,20)|(\d+,\d{13,19})$', s)
    print(s, m is not None)

生产:

7878454545,20 True
78858558854545,3245697412356 True
184848,455 False
7878787878,45 False
488455784 False
4874854848885 False

此模式将满足您的要求:

^(78)+[^(78)]+\d+,(20|\d{13,19})$

演示如下:

https://regex101.com/r/wF3tD3/4

相关问题 更多 >