2 回答

TA貢獻1752條經驗 獲得超4個贊
您看到的是 Python(更具體地說,是 Regex 模塊)返回一個 re.Mach object。這個對象有方法和類,你可以調用它們來得到你想要的結果。
例如,如果您只想將匹配作為字符串,則此代碼將打印它:
>>> expression = re.compile('.+')
>>> result = expression.search('abcd')
>>> print(result.group())
'abcd'
您當前的代碼(第一個示例)還包含一個與輸入字符串不匹配的表達式,這可能是一些混亂的根源。在我提供的示例中,我使用了.+,它將匹配任何字符零到無限次。Regex101.com在幫助創建 Regex 表達式和理解語法方面做得非常出色。
這是RegexMatch對象的文檔(您在當前代碼中得到的內容),具體來說,這里是該.group()方法的文檔。
快速說明:
您不需要在調用搜索函數之前編譯表達式(但是,這完全是個人喜好,但它更常用;在調用搜索函數之前編譯表達式是有正當理由的,但這超出了范圍回答這個問題)。以下兩個代碼塊將執行完全相同的操作:
expression = re.compile('.+')
print(expression.search('string'))
print(re.search(r'.+', 'string'))
在第二塊中,表達式是搜索函數中的第一個參數,r前面有a,表示它是一個正則表達式。
希望這可以幫助!

TA貢獻1825條經驗 獲得超4個贊
正如re.search() 的文檔所說:
掃描字符串尋找正則表達式模式產生匹配的第一個位置,并返回相應的匹配對象。如果字符串中沒有位置與模式匹配,則返回 None;請注意,這與在字符串中的某個點找到零長度匹配不同。
(強調我的)
您的第一個 RegExx*匹配零個或多個character x。在所有匹配項中,返回第一個匹配項。您的模式與字符串的開頭匹配,因為它是zero 'x's. <re.Match object; span=(0, 0), match=''>因此,您的比賽在位置 0 ( )開始和結束。
當您搜索時,x+這意味著一個或多個 character x。您的字符串中唯一x的位置是位置2(第三個字符,但我們從 0 開始計數)。它是一個字符長,所以它在位置 3 結束。因此你的 result <re.Match object; span=(2, 3), match='x'>。
如果您查看所有匹配項而不僅僅是第一個匹配項,您也會看到其他匹配項!你可以這樣做,例如使用re.findall()
例子:
>>> re.findall(r'x+', 'abxb')
['x']
>>> re.findall(r'x*', 'abxb')
['', '', 'x', '', '']
如您所見,匹配零個或多個意味著我們也匹配了字母之間所有不存在的字符!當與其他模式結合使用時,零或更多的這個特性會更有用,即如果我們想說一個字符或單詞在我們的匹配中是可選的。假設我們想要匹配所有b后跟零個或多個xes 的 s:
>>> re.findall(r'bx*', 'abxb')
['bx', 'b']
添加回答
舉報