簡體   English   中英

解析字符串以獲取特定字符前后的數字

[英]Parse string to get digits before and after particular character

我正在嘗試從此字符串解析X之前和之后的數字,但無法獲取所有數字。 有人可以幫我指出我在這里缺少什么嗎?

>>> import re
>>> f = "abc_xyz1024X137M4B4abc_xyz"
>>> re.findall(".*\w+(\d+)X(\d+).*", f)
[('4', '137')]

請注意, .*\\w+(\\d+)X(\\d+).*首先捕獲盡可能多的0+字符(整個字符串),然后嘗試進行機架匹配后繼的模式。 \\w+回溯到下一個字符是前一個數字的點X ,所以第一個捕獲組只包含前的單數位X ,而第二個包含后所有的數字X 選中.*\\w+(\\d+)X(\\d+).*調試器頁面

您應該只匹配並捕獲數字,然后匹配X ,然后再次匹配並捕獲數字。

您可以使用

import re
f = "abc_xyz1024X137M4B4abc_xyz"
print(re.findall(r"(\d+)X(\d+)", f))
# => [('1024', '137')]

或者,如果您只對單個比賽感興趣:

m = re.search(r"(?P<x>\d+)X(?P<y>\d+)", f)
if m:
    print(m.groupdict()) # => {'y': '137', 'x': '1024'}

請參閱Python演示regex演示

在此特定示例中,另一個選擇是將字符串拆分為字符"X" 然后在拆分的左半部分中找到最后一組連續數字,在拆分的右半部中找到第一組連續數字。

例如:

import re
f = "abc_xyz1024X137M4B4abc_xyz"

left, right = f.split("X")
print(right)
#137M4B4abc_xyz

print(left)
#abc_xyz1024

print((re.findall('\d+', left)[-1], re.findall('\d+', right)[0]))
#('1024', '137')

暫無
暫無

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

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