簡體   English   中英

正則表達式在第二次出現字符后匹配相鄰數字

[英]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))

Output

['456', '000', '111']

如果您想簡化/修改/探索表達式,它已在regex101.com的右上角面板上進行了解釋。 如果您願意,您還可以在此鏈接中觀看它如何與一些示例輸入匹配。


暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM