簡體   English   中英

如何閱讀python正則表達式(?:^ | [b _./-])[Tt] \ test

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

因此,表達式為包含在行的開頭處的Testtest輸入文本生成匹配,或者如果直接在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單詞邊界 ,在testTest之前不是單詞字符。 這很可能是個錯誤; \\b不能成為字符類的一部分, \\b 不起作用 相反,它將被視為退格角色。

這個問題是 3年半前向該項目報告的

非捕獲組 (?: ... )對正則表達式的匹配沒有影響

(?:^|[b_./-])[Tt]est

正則表達式可視化

...所以在一行的開頭它會匹配:

test
Test

或文本中任何地方的以下選項之一:

bTest
btest
_Test
_test
.Test
.test
/Test
/test
-Test
-test

暫無
暫無

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

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