簡體   English   中英

在特定文本正則表達式 python 之后捕獲所有出現的 substring

[英]Capture all occurences of substring after specific text regex python

我有一份很長的文檔,其中我感興趣的行以Categories:開頭。 我想在Categories:之后找到所有由,分隔的單詞。 這是一個示例行

Categories : Turbo Prop , Very Light , Light , Mid Size

我想找到Turbo PropVery LightLightMid Sizestart indexend index

我正在使用以下代碼

regex_pattern = r"(?<=Categories : )([A-Za-z ]+(?:,)?)+"

matched_text = regex.search(regex_pattern,doc_tex)

但是matched_text.groups()只給出Mid Size 簡而言之,我想在Categories之后找到group 1的所有出現。

分兩步進行。 首先使用:拆分行,然后使用,拆分第二部分。

category_string = line.split(':')[1]
categories = category_string.split(',')

看起來評論回答了 OP 的問題,但為了完整起見,我想我會發布他們討論的答案。 看起來 Python 的 re 模塊並沒有存儲重復捕獲組的所有實例; 請參閱問題 7132 然而,正則表達式package 添加了額外的方法來處理重復的捕獲組,包括。

  • 捕獲 - 返回在一個或多個組中匹配的字符串列表。
  • starts - 返回起始位置的列表。
  • ends - 返回結束位置的列表。
  • spans - 返回跨度列表。 與 matchobject.span([group]) 比較。

因此,將正則表達式 package 與matchedobject.startsmatchedobject.ends方法一起使用應該有效。

當您使用PyPi regex 模塊時,您可以獲得每組的所有捕獲,以及它們的開始和結束索引,使用

import regex
text = "Categories : Turbo Prop , Very Light , Light , Mid Size"
regex_pattern = r"Categories\s*:(?:\s*([A-Za-z ]+)\b(?:\s*,)?)+"
m = regex.search(regex_pattern, text)
result = list(zip(m.captures(1),m.starts(1),m.ends(1)))
print(result) 
# => [('Turbo Prop', 13, 23), ('Very Light', 26, 36), ('Light', 39, 44), ('Mid Size', 47, 55)]

請參閱Python 演示

PyPi regex文檔中的更多詳細信息:

匹配 object 有額外的方法返回有關重復捕獲組的所有成功匹配的信息。 這些方法是:

  • matchobject.captures([group1, ...])
    • 返回在一個或多個組中匹配的字符串列表。 matchobject.group([group1, ...])進行比較。
  • matchobject.starts([group])
    • 返回起始位置列表。 matchobject.start([group])進行比較。
  • matchobject.ends([group])
    • 返回結束位置的列表。 matchobject.end([group])進行比較。
  • matchobject.spans([group])
    • 返回跨度列表。 matchobject.span([group])進行比較。

請注意,我不得不稍微修改一下您的正則表達式:

  • Categories\s*: - 匹配Categories ,零個或多個空格, :
  • (?:\s*([A-Za-z ]+)\b(?:\s*,)?)+ - 一次或多次重復
    • \s* - 零個或多個空白字符
    • ([A-Za-z ]+) - 一個或多個 ASCII 字母或空格
    • \b - 單詞邊界(因此,第 1 組值將以字母結尾)
    • (?:\s*,)? - 零個或多個空白字符和逗號的可選序列。

暫無
暫無

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

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