簡體   English   中英

如何使用Python正則表達式重復n次帶括號的組?

[英]How do I repeat a parenthesized group n times using a Python regular expression?

我正在嘗試從許多字符串中獲取|<digit><whitespace>對。 我正在使用正則表達式(\\|\\d+\\s+){2}執行此操作,即:

>>> import re
>>> s = '|11 |22    |\n|33  |444 |\n'
>>> re.findall('(\|\d+\s+){2}', s)
['|22    ', '|444 ']

我期望的是:

['|11 |22    |', '|33  |444 |']

因為()應該定義一個組,而{2}應該重復兩次。 它為什么不這樣做,還有什么更好的方法呢?

將捕獲組更改為非捕獲組並添加\\| 在您的正則表達式的最后。 因為如果有任何捕獲組,則re.findall將返回捕獲的字符,否則它將返回所有匹配的字符。 由於您的正則表達式包含一個貪婪的捕獲組,因此它僅捕獲最后一個重復,但匹配所有先前的重復。

>>> s = '|11 |22    |\n|33  |444 |\n'
>>> re.findall('(?:\|\d+\s+){2}\|', s)
['|11 |22    |', '|33  |444 |']

暫無
暫無

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

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