簡體   English   中英

如何在 python 中使用正則表達式匹配帶有多個點的句子?

[英]How to match a sentence with multiple dots using regex in python?

我正在使用 Python 中的re.txt文件中查找問題和答案。 這是文本文件的示例:

1. Xiva xonligining yirik shaharlari xato berilgan javobni aniqlang.
A) Xiva, Kat        
B) Yangi Urganch, Hazorasp    
C) Qo'ng'irot, Xo'jayli   
D) Vazir, Mang'it
2. Xiva xonligi Buxoro amirligi kabi bekliklarga bo'lingan bo'lib, ularni xon tomonidan tayinlangan ......... boshqargan.
A) beklar         
B) noiblar     
C) beklar va to'ralar      
D) biy va beklar

不要介意語言。 問題以數字開頭,后跟. 然后是問題主體(通常以?.!結尾)

然后是從AD的答案,后跟一個右括號)

這是我查找問題的正則表達式: re"^(\d+\.)?\s+[\"']?([.]{2,})?[AZ][^.??]+((.?[??.]['\"]?\s[\"'].[AZ][^.?!]).)+[.?!'\"]+$"

我的問題是當問題主體內有多個點(如問題#2)時,我的正則表達式無法匹配整個問題主體。 它寧願停在它看到的第一個點上。 我應該如何 go 關於這個? 任何幫助,將不勝感激。 謝謝。

順便說一句,這是我使用正則表達式找到答案的方法: re"^[a-zA-Z]\)?\s+\w+.+"也歡迎提出有關我查找問題和答案的方法的建議。

由於您的文本文件格式正確。 你可以試試這個來提取問題:

re.findall([\d+][\s\S][\w\W]+[\d\D], t)

您可以從匹配行的數字、點和 rest 開始。 然后可選地重復所有不以大寫字符 AZ 開頭的行,后跟)

如果您只想要問題主體,您可以在一個組中捕獲它。

^\d+\.[^\S\r\n]*([A-Z].*(?:\r?\n(?![A-Z]\)).*)*[.?!])

解釋

  • ^字符串開頭
  • \d+\.[^\S\r\n]*匹配 1+ 位, a . 和可選的不帶換行符的空白字符
  • (捕獲組 1
    • [AZ].*匹配大寫字符 AZ
    • (?:\r?\n(?.[AZ]\)).*)*可選擇重復所有不以大寫字符 AZ 開頭的行,后跟)
    • [.?!]匹配其中一個. ? !
  • )關閉第 1 組

正則表達式演示

匹配答案的模式^[a-zA-Z]\)?\s+\w+.+有一個可選的)並且也可以以小寫字符 az 開頭,例如也可以匹配a test

如果)始終存在,則不必將其設為可選,並且可能僅匹配[AZ]會使更改得到的誤報更小一些。

暫無
暫無

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

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