簡體   English   中英

python regex如何匹配以下內容?

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

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