遇到以下问题:
我有一个字符串“ ABC.123.456XX”,我想使用正则表达式提取第二个句点之后的3个数字字符。真的很为此苦苦挣扎,并且希望得到任何新的见解,这是我得到的最接近的信息,但与我想要的却不是很接近:
'.*\.(.*?\.\d{3})'
我先感谢您的帮助-谢谢。
答案 0 :(得分:2)
如果您的输入将始终采用类似的格式,例如localize("key", "String")
,那么一种解决方案是字符串操作:
xxx.xxx.xxxxx
说明
在>>> s = 'ABC.123.456XX'
>>> '.'.join(s.split('.')[2:])[0:3]
行中:
'.'.join(s.split('.')[2:])[0:3]
将字符串分成列表s.split('.')
['ABC', '123', '456XX']
在第二个元素之后加入列表的其余部分,因此'.'.join(s.split('.')[2:])
'456XX'
从索引0到索引2(包括索引)中选择子字符串,因此结果为[0:3]
答案 1 :(得分:2)
点两次,然后在捕获组1中跟随3位数字
[^.]*(?:\.[^.]*){2}(\d{3})
https://regex101.com/r/qWpfHx/1
扩展
[^.]*
(?: \. [^.]* ){2}
( \d{3} ) # (1)
答案 2 :(得分:1)
此表达式也可以正常工作:
[^\r\n.]+\.[^\r\n.]+\.([0-9]{3})
import re
regex = r'[^\r\n.]+\.[^\r\n.]+\.([0-9]{3})'
string = '''
ABC.123.456XX
ABCOUOU.123123123.000871XX
ABCanything_else.123123123.111871XX
'''
print(re.findall(regex, string))
['456', '000', '111']
如果您希望简化/修改/探索表达式,请在regex101.com的右上角进行说明。如果愿意,您还可以在this link中查看它如何与某些示例输入匹配。