Regex 查找以特定数字范围开头的八位数字

Regex 查找以特定数字范围开头的八位数字,regex,Regex,我需要一个正则表达式来查找以以下范围内的任何数字开头的所有八位数字: 20-31 40-42 50-53 60-61 71 81 91-93 这是怎么做到的 /因此您可以尝试使用单词边界(否则,例如2018年的20个匹配)和regex\b(2\d | 31 | 4[012]| 5[0-3]| 6[01]|[78]1 | 9[1-3])\d{6}\b 下面是Rubular中的一个实例:。以下正则表达式匹配范围20-31中的数字。。。含义从20000000到3099999 Regex:\b(?:2\

我需要一个正则表达式来查找以以下范围内的任何数字开头的所有八位数字: 20-31 40-42 50-53 60-61 71 81 91-93

这是怎么做到的


/因此

您可以尝试使用单词边界(否则,例如2018年的20个匹配)和regex
\b(2\d | 31 | 4[012]| 5[0-3]| 6[01]|[78]1 | 9[1-3])\d{6}\b


下面是Rubular中的一个实例:。

以下正则表达式匹配范围
20-31
中的数字。。。含义从
20000000
3099999

Regex
\b(?:2\d | 30 | 4[01]| 5[012]| 60 | 71 | 81 | 9[12])\d{6}\b

详细信息

  • \b
    在单词边界断言位置
    (^\w |\w$|\w\w |\w\w)
  • (?:)
    非捕获组
  • \d
    匹配一个数字(等于
    [0-9]
    ),
    [0-2]
    等于
    [012]
  • []
    匹配列表中的单个字符
  • |

你试过什么?因此,这不是一个代码编写服务。如果不使用正则表达式,这会更容易。@AlekDepler这是错误的信息。Regex不是邪恶的。它和其他任何东西一样有它的用途。
(2\d | 31 | 4[012]| 5[0123]| 6[01]| 71 | 81 | 9[123])\d{6}
@AlekDepler,如果编写代码不适合该任务并且需要快速正则表达式(对于一个)。我知道,当我们急于获得结果时,我已经使用正则表达式解析了数十万行数据来提取特定信息。编写一个程序将花费更长的时间。这也取决于手头的任务。如果性能是一个问题(特别是当您谈论嵌套循环时),那么可以使用单个(可能是复杂的)正则表达式模式替换整个任务。完全无视一种语言,因为你认为它是邪恶的illogical@AlekDepler在某些情况下,您可能会在字符串中查找特定的模式(大多数使用regex)。使用字符串函数无法轻松复制这些内容。例如,编写一个程序,在字符串中查找每次出现的
a
,后跟任何字母,然后是
d
。在正则表达式中更容易做到这一点。您可以将
[0-9]
替换为
\d
[0123]
替换为
[0-3]
,将
71 | 81
替换为
[78]1
,使其更短(最后一个使其性能更好)。感谢您的输入--我已更新了我的答案。:)此外,OP正在寻找以这两位数字开头,后面还有6位数字的数字:
\b(?((?:2-d | 31 | 4[012]| 5[0-3]| 6[01]|[78]1 | 9[123])\d{6}\b
啊,抓得好。我又更新了我的答案。
31
不是
30
,它缺少
42
61
(不是
60
),
93
@ctwheels范围30-31,(42,61,93)是上限,范围60-61对不起,关于
60
,你是对的,但其余的都缺少了。OP提到以下范围内的任何数字,这意味着它包括上限(这一点可以通过以下方式得到证明:
71
是明确的,
60-61
意味着这两个数字都应该包括在内。@ctr它们是上限。20-31表示从20000000到3099999。这是一种看待它的方式。你应该要求OP对此进行详细说明。我们都在毫无根据地做出不同的假设。