正则表达式在第二次出现字符后匹配相邻的数字

时间:2019-10-08 21:53:31

标签: python regex

遇到以下问题:

我有一个字符串“ ABC.123.456XX”,我想使用正则表达式提取第二个句点之后的3个数字字符。真的很为此苦苦挣扎,并且希望得到任何新的见解,这是我得到的最接近的信息,但与我想要的却不是很接近:

'.*\.(.*?\.\d{3})'

我先感谢您的帮助-谢谢。

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中查看它如何与某些示例输入匹配。