簡體   English   中英

正則表達式在子字符串之前捕獲所有

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

這只是給出了整個字符串。 我如何調整它以捕獲“任意數量的數字-空格-殺死”之前的所有內容?

讓我們擺脫困境。 我已經咨詢了以下內容。 第二個看起來特別有用,但我無法使其適合此目的。

使用Python提取字符串中字符前的數字

如何在字符串Python中獲取:之前的所有內容

如何獲取某個字符之前的字符串的最后一部分?

您可以使用

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.

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