正则表达式从 10 个字符的字符串(数字和文本)中取出前 4 或 5 个字符

Regex to get out of a 10 character string (numbers and text) the first 4 or 5 characters

我打算做的是:从 10 个字符的字符串模式中获取一个 4-5 个字符的字符串(通常表示国家和城市)。有多个这样的实例。

    TEST IC ITMI12CR01 GRATH1CR01, ALTIR1AB02
TEST-ICITMI12CR01 BE5253, BE2178 and BE40035 towards GRATH1CR01, ROTIM1CR01 and ALTIR1AB02 are down
TEST-IC Multiple links are TRIST1AB01<><>ROTIM1CR01<>GRATH1CR01<>ITMI12CR01
TEST IC ITMI12CR01 links to GRATH1CR01, ALTIR1AB02

以上例之一:ITMI12CR01 和 ROTIM1CR01。 对于第一个实例:它将获取 10 个字符的字符串,将前 4 个字符放入捕获组 第二个实例:将前 5 个字符放入捕获组。

您认为这个要求合理吗?

谢谢!

这应该会直接找到 4 或 5 个字符的匹配项。如果我误解了你要找的东西,请澄清。

import re

s = """TEST IC ITMI12CR01 GRATH1CR01, ALTIR1AB02
TEST-ICITMI12CR01 BE5253, BE2178 and BE40035 towards GRATH1CR01, ROTIM1CR01 and ALTIR1AB02 are down
TEST-IC Multiple links are TRIST1AB01<><>ROTIM1CR01<>GRATH1CR01<>ITMI12CR01
TEST IC ITMI12CR01 links to GRATH1CR01, ALTIR1AB02"""


l = [match.group(1) if match.group(1) else match.group(2)
     for match in re.finditer(r'\b(?:([A-Z]{4})(?:[0-9][A-Z0-9]{5})|([A-Z]{5})(?:[0-9][A-Z0-9]{4}))\b', s)
    ]
print(l)

打印:

['ITMI', 'GRATH', 'ALTIR', 'GRATH', 'ROTIM', 'ALTIR', 'TRIST', 'ROTIM', 'GRATH', 'ITMI', 'ITMI', 'GRATH', 'ALTIR']

我正在寻找:

  1. 4 个字母字符后跟 1 个数字后跟 5 个字母数字字符或。
  2. 5 个字母字符后跟 1 个数字字符后跟 4 个字母数字字符。

See Demo