用正则表达式检索某些数字

时间:2018-03-16 14:52:15

标签: regex

我需要帮助用正则表达式获取某些数字。 由于我不太了解正则表达式,我只能设法看出前两个字符是否与95 - 99匹配。^([0-9] [5-9] {4})

我有数字00000到99999。

我想排除所有以95及以上开头的数字。

所以00000 - 94999没问题,95000 - 99999不行。

3 个答案:

答案 0 :(得分:1)

您可以匹配数字范围00000 - 94999,包括您可能会尝试的前导零:

  • ^从字符串的开头
  • (?=\d{5}$)从一个积极的先行开始,确保数字不超过5位,直到字符串结尾
  • 0*预先添加零个或多个零
  • (?:9[0-4][0-9]{3}|[1-8][0-9]{4}|[1-9][0-9]{1,3}|[0-9])匹配数字范围
  • $字符串的结尾

你的正则表达式可能如下:

^(?=\d{5}$)0*(?:9[0-4][0-9]{3}|[1-8][0-9]{4}|[1-9][0-9]{1,3}|[0-9])$

答案 1 :(得分:0)

正则表达式用于验证字符串是否与设置模式匹配。它不是用于比较数字以查看它们是否在范围内。将文本(如果这是您开始的)转换为数字,然后在if语句中使用比较运算符。

答案 2 :(得分:0)

从可读性和性能角度来看,正则表达不太适合执行数字比较。提取数字并在之后进行数字比较会更加明智。

你没有提到过一种语言,所以我将用Python3进行演示。

# input data
lines = [
    "my line #1 :94995: message #1",
    "my line #2 :95005: message #2"
]

for i, line in enumerate(x):

    # extract a 5-digit number wrapped in colons
    match = re.search(':([0-9]{5}):', line)
    if match is None:
        continue

    # convert to a number, and verify
    num = int(match.group(1))
    if num >= 95000:
        continue

    # print any lines that meet our criteria
    print("line %d meets our criteria! (%d)" % ( i, num ))

将输出:

line 0 meets our criteria! (94995)