[英]How to python regex match the following?
1<assume tab here>Algebra I<assume tab here>START
1.1 What are the Basic Numbers? 1-1
對於上述兩行中的每行,我如何將正則表達式僅匹配不超過“?”的數字。 從本質上講,我想要以下小組:
["1", "Algebra I"]
["1.1", "What are the Basic Numbers?"]
匹配所有內容,直到並包括一個問號,或一個“制表符”。 如何使用單個正則表達式執行此操作?
這是一個簡單的正則表達式:
^([\d.]+)\s*([^\t?]+\??)
第一組是數字,第二組包含文本。
要檢索單個匹配項:
match = re.search(r"^([\d.]+)\s*([^\t?]+\??)", s)
if match:
mynumbers = match.group(1)
myline = match.group(2)
要遍歷比賽,請從以下位置獲取組1和2:
reobj = re.compile(r"^([\d.]+)\s*([^\t?]+\??)", re.MULTILINE)
for match in reobj.finditer(s):
# matched text: match.group()
干得好:
(\d(?:\.\d)*)\s+(?:(.*?\?|.*?)\t)
說明: (\\d(?:\\.\\d)*)
匹配一個數字,后跟零個或多個.\\d
。 這之后是一個或多個空格字符,后跟帶有(.*?)
的任何內容(即懶惰而不是貪婪的字符(.*?)
,其后跟有一個?。 或\\ t在非捕獲組中。
輸出:
string1 = "1.1 What are the Basic Numbers? 1-1"
string2 = '1\tAlgebra I\tSTART'
m = re.match(pattern, string2)
m.group(1)
#'1'
m.group(2)
#'Algebra I'
m = re.match(pattern, string1)
m.group(1)
#'1.1'
m.group(2)
#'What are the Basic Numbers?'
編輯:添加了非捕獲組。
編輯#2:修復它以包括問號
EDIT#3修復了組數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.