![](/img/trans.png)
[英]How to match patterns “begins with A or ends with B” with Python regular expression?
[英]how to read python regular expression (?:^|[b_./-])[Tt]est
我很感激閱讀/解釋這個常規表達(Python語法)的一些幫助:
(?:^|[b_./-])[Tt]est
(在查找測試文件時,它是由nosetest作為過濾器使用的默認RE)。 這里在“擴展使用”部分中進行了描述。
編輯: 如果你是因為看着鼻子而來到這里的,你可能想看看pytest作為另一種選擇。
到目前為止我的理解:open-paren問號冒號填充關閉paren是一個'擴展',意味着從匹配結果中的字符串中排除東西 。 哪個(從我的觀點來看,只是試圖理解給定的文件名是否滿足或失敗表達式)意味着我可以忽略它(?)
最后一部分'[Tt] est'表示測試或測試。
其余的含義是朦朧的。 插入符號表示“匹配字符串的開頭”,豎線表示OR,括號中的字符(b,下划線,句點,斜線,減號)是替代匹配。 換句話說,匹配字符串開頭或5個指定字符之一,然后是測試或測試? 這意味着字符串'bTest'和'/ Test'匹配(並且它們顯然不匹配)。
感謝您幫助我改進對模式的解釋!
(?:...)
是一個非捕獲組 ; 與(...)
相同但不會導致捕獲的組值。 它限制了|
包含的內容 備用組。 該組要么匹配字符串的開頭,要么匹配字符b
, _
, .
, /
或-
。
因此,表達式為包含在行的開頭處的Test
或test
輸入文本生成匹配,或者如果直接在b
前面,則使用下划線,點,斜杠或破折號。
'bTest'
和/Test
做匹配:
>>> pattern = re.compile(r'(?:^|[b_./-])[Tt]est')
>>> pattern.search('Test').group()
'Test'
>>> pattern.search('Hello bTest').group()
'bTest'
>>> pattern.search('Hello /Test').group()
'/Test'
b
很令人驚訝,所以我看了一下源代碼 。 文檔缺少反斜杠,而不是b
匹配,但是\\b
:
r'(?:^|[\b_\.%s-])[Tt]est' % os.sep)
\\b
是單詞邊界 ,在test
或Test
之前不是單詞字符。 這很可能是個錯誤; \\b
不能成為字符類的一部分, \\b
不起作用 。 相反,它將被視為退格角色。
非捕獲組 (?: ... )
對正則表達式的匹配沒有影響
(?:^|[b_./-])[Tt]est
...所以在一行的開頭它會匹配:
test
Test
或文本中任何地方的以下選項之一:
bTest
btest
_Test
_test
.Test
.test
/Test
/test
-Test
-test
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.