![](/img/trans.png)
[英]Capture all occurences of substring after specific text regex python
[英]Regex capture all before substring
我有一個字符串:
s = 'Abc - 33 SR 11 Kill(s) P G - (Type-1P-G) 2 Kill(s) M 1 Kill(s) S - M9A CWS 1 Kill(s) 11 Kill(s)'
我試圖將其拆分以捕獲殺死的數量,以及每個"XY Kill(s)"
之前的信息以獲取此輸出:
['Abc - 33 SR',
'P G - (Type-1P-G)',
'M',
'S - M9A CWS']
獲得殺戮次數很簡單:
re.findall(r"(\d+) Kill", s)
['11', '2', '1', '1', '11']
獲取文本更加困難。 通過研究,我嘗試使用以下正則表達式,該正則表達式只是一系列捕獲組的開始:
re.findall(r"(?=[0-9]+ Kill)", s)
['', '', '', '', '', '', '']
然后,我將其更改為在“每個組之前添加任意數量的字符”。
re.findall(r"(.+)(?=[0-9]+ Kill)", s)
['Abc - 33 SR 11 Kill(s) P G - (Type-1P-G) 2 Kill(s) M 1 Kill(s) S - M9A CWS 1 Kill(s) 1']
這只是給出了整個字符串。 我如何調整它以捕獲“任意數量的數字-空格-殺死”之前的所有內容?
讓我們擺脫困境。 我已經咨詢了以下內容。 第二個看起來特別有用,但我無法使其適合此目的。
您可以使用
re.findall(r'(.*?)\s*(\d+) Kill\(s\)\s*', s)
細節
(.*?)
-捕獲組1:除換行符以外的任何0+個字符,並且盡可能少 \\s*
-0+空格 (\\d+)
-捕獲組2:一位或多位數字 Kill(s)
-一個空格和Kill(s)
子字符串 \\s*
-0+空格 Python演示 :
import re
rx = r"(.*?)\s*(\d+) Kill\(s\)\s*"
s = "Abc - 33 SR 11 Kill(s) P G - (Type-1P-G) 2 Kill(s) M 1 Kill(s) S - M9A CWS 1 Kill(s) 11 Kill(s)"
print(re.findall(rx, s))
輸出:
[('Abc - 33 SR', '11'), ('P G - (Type-1P-G)', '2'), ('M', '1'), ('S - M9A CWS', '1'), ('', '11')]
您可以使用re.split()
獲取匹配項之間所有內容的列表。
>>> re.split(r"\d+ Kill\(s\)", s)
['Abc - 33 SR ', ' P G - (Type-1P-G) ', ' M ', ' S - M9A CWS ', ' ', '']
您可以清理它以刪除空格和空字符串。
>>> [s.strip() for s in re.split(r"\d+ Kill\(s\)", s) if s.strip()]
['Abc - 33 SR', 'P G - (Type-1P-G)', 'M', 'S - M9A CWS']
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.