[英]Regex match adjacent digits after second occurrence of character
遇到以下問題:
我有一個字符串“ABC.123.456XX”,我想使用正則表達式來提取第二個句點之后的 3 個數字字符。 真的為此苦苦掙扎,並希望有任何新的見解,這是我得到的最接近的結果,但它並不真正接近我想要的:
'.*\.(.*?\.\d{3})'
我提前感謝任何幫助 - 謝謝。
如果您的輸入始終采用類似的格式,例如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:3]
選擇索引0到索引2(含)的substring,所以結果為456
點,非點兩次,然后在捕獲組 1 中跟隨 3 位數字
[^.]*(?:\.[^.]*){2}(\d{3})
https://regex101.com/r/qWpfHx/1
展開
[^.]*
(?: \. [^.]* ){2}
( \d{3} ) # (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的右上角面板上進行了解釋。 如果您願意,您還可以在此鏈接中觀看它如何與一些示例輸入匹配。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.