正则表达式从 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']
我正在寻找:
- 4 个字母字符后跟 1 个数字后跟 5 个字母数字字符或。
- 5 个字母字符后跟 1 个数字字符后跟 4 个字母数字字符。
我打算做的是:从 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']
我正在寻找:
- 4 个字母字符后跟 1 个数字后跟 5 个字母数字字符或。
- 5 个字母字符后跟 1 个数字字符后跟 4 个字母数字字符。