[英]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'}
在此特定示例中,另一個選擇是將字符串拆分為字符"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.