簡體   English   中英

正則表達式以匹配python中的重復組

[英]Regex to match repeating groups in python

我有一個country.txt文件,其中包含以下示例文本:

[Country "Kenya"]\n[CapitalCity "Nairobi"]\n\n
[Country "Uganda"]\n[CapitalCity "Kampala"]\n\n
[Country "Tanzania"]\n[CapitalCity "Dodoma"]\n\n

該國家最多可以有20個屬性。 為了簡單起見,我僅包括Country和CapitalCity。 我需要一個可在python中工作的正則表達式,以返回上面的示例數據:

a) n matches, in the above case n=3
b) Each match should have m groups, in this case m=2: Country and CapitalCity

我已經閱讀了https://www.regular-expressions.info/captureall.html,但似乎無法使它適用於我的用例。

我已經試過了

(\[([A-Za-z]+)\s\"([^\"]*)\"\]\\n\\n)+

在這里https://regex101.com/r/cujIDd/1,但它沒有給我國家。

編輯 :預期的輸入和輸出

示例1:輸入

[Country "Kenya"]\n[CapitalCity "Nairobi"]\n\n
[Country "Uganda"]\n[CapitalCity "Kampala"]\n\n
[Country "Tanzania"]\n[CapitalCity "Dodoma"]\n\n

預期產量

matches: 3
match 1: Country: Kenya
         CapitalCity: Nairobi
match 2: Country: Uganda
         CapitalCity: Kampala
match 3: Country: Tanzania
         CapitalCity: Dodoma

示例2:輸入

[Country "Kenya"]\n[CapitalCity "Nairobi"]\n[President "Kenyatta"]\n\n
[Country "Uganda"]\n[CapitalCity "Kampala"]\n[President "Museveni"]\n\n
[Country "Tanzania"]\n[CapitalCity "Dodoma"]\n[President "Magufuli"]\n\n

預期產量

matches: 3
match 1: Country: Kenya
         CapitalCity: Nairobi
         President: Kenyatta
match 2: Country: Uganda
         CapitalCity: Kampala
         President: Museveni
match 3: Country: Tanzania
         CapitalCity: Dodoma
         President: Magufuli

示例3:輸入

[Country "Kenya"]\n[CapitalCity "Nairobi"]\n[President "Kenyatta"]\n[Continent "Africa"]\n\n
[Country "Uganda"]\n[CapitalCity "Kampala"]\n[President "Museveni"]\n[Continent "Africa"]\n\n
[Country "Tanzania"]\n[CapitalCity "Dodoma"]\n[President "Magufuli"]\n[Continent "Africa"]\n\n

預期產量

matches: 3
match 1: Country: Kenya
         CapitalCity: Nairobi
         President: Kenyatta
         Continent: Africa
match 2: Country: Uganda
         CapitalCity: Kampala
         President: Museveni
         Continent: Africa
match 3: Country: Tanzania
         CapitalCity: Dodoma
         President: Magufuli
         Continent: Africa

你得到了流

您可能會使用類似於以下內容的東西:

regex = r"^[^\"]*\"(\w+)\"[^\"]+\"(\w+)\"[^\"].*"
subst = "\\1, \\2"

result = re.sub(regex, subst, test_str, 0, re.MULTILINE)

if result:
    print (result)

輸出

Kenya, Nairobi
Uganda, Kampala
Tanzania, Dodoma

范例

https://regex101.com/r/cujIDd/6

您可以刪除外部重復組()+ ,並使第二個\\\\n可選(?:\\\\n)?

在regex101.com上查看使用中正則表達式

\\[([A-Za-z]+)\\s\\"([^\\"]*)\\"\\]\\\\n(?:\\\\n)?

如果只想捕獲前兩個屬性,則可以使用^$錨點:

^\\[([A-Za-z]+)\\s*\\"([^\\"]+)\\"\\]\\\\n\\[([A-Za-z]+)\\s*\\"([^\\"]+)\\"\\].*$

在regex101.com上查看使用中正則表達式

暫無
暫無

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

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