簡體   English   中英

這個python表達式中%的含義是什么

[英]What is the meaning of % in this python expression

有人可以解釋這個正則表達式的含義嗎? 我正在看別人的python代碼,我只是對表達式的作用感到好奇。 我也不確定第二個%符號的含義。

regexStr = '(%s)' % '|'.join(['.*'.join(str(i) for i in p) for p in itertools.permutations(charList)])

這樣做:

import itertools
charList = [1, 2, 3]

'(%s)' % '|'.join(['.*'.join(str(i) for i in p) for p in itertools.permutations(charList)])
#>>> '(1.*2.*3|1.*3.*2|2.*1.*3|2.*3.*1|3.*1.*2|3.*2.*1)'

首先,它生成輸入的所有排列(唯一順序):

for permutation in itertools.permutations(charList):
    print(permutation)
#>>> (1, 2, 3)
#>>> (1, 3, 2)
#>>> (2, 1, 3)
#>>> (2, 3, 1)
#>>> (3, 1, 2)
#>>> (3, 2, 1)

對於其中的每個,它將每個項目轉換為字符串,然后將它們與.*連接起來.*

'.*'.join(str(i) for i in (1, 2, 3))
#>>> '1.*2.*3'

然后將所有這些|

'|'.join(['.*'.join(str(i) for i in p) for p in itertools.permutations(charList)])
#>>> '1.*2.*3|1.*3.*2|2.*1.*3|2.*3.*1|3.*1.*2|3.*2.*1'

最后使用'(%s)' % result'(%s)' % result 包裝在方括號中

'(%s)' % '|'.join(['.*'.join(str(i) for i in p) for p in itertools.permutations(charList)])
#>>> '(1.*2.*3|1.*3.*2|2.*1.*3|2.*3.*1|3.*1.*2|3.*2.*1)'

模式'1.*2.*3'匹配所有序列,如111111222333333

的百通A|B|C|D匹配的一個 ABCD

因此,生成的正則表達式匹配所有排列,每個項目重復任意次數(包括0)。

外括號使它成為一個捕獲組。

只需嘗試使用測試字符串即可。 讓我們嘗試“ abc”

regexStr = '(%s)' % '|'.join(['.*'.join(str(i) for i in p) for p in itertools.permutations('abc')])

>>> regexStr
'(a.*b.*c|a.*c.*b|b.*a.*c|b.*c.*a|c.*a.*b|c.*b.*a)'

因此,它創建了一個regex搜索字符串,其中滲透字符串的每個字符以'.*'分隔,並以'|'分隔每個排列'|'

如果該代碼行中的任何步驟使您感到困惑,請查看每個組件的文檔

itertools.permutations
str.join
regex formatting

暫無
暫無

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

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