在这个python表达式中,%的含义是什么
有人能解释一下这个正则表达式是什么意思吗?我正在查看其他人的python代码,我只是对表达式的作用感到好奇。我也不确定第二个%符号是什么意思在这个python表达式中,%的含义是什么,python,regex,Python,Regex,有人能解释一下这个正则表达式是什么意思吗?我正在查看其他人的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(['.*'.joi
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)'
首先,它生成输入的所有排列(唯一顺序):
对于其中的每一项,它都将每个项转换为字符串,并使用*
'.*'.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
来:
模式'1.*2.*3'
匹配所有序列,如111111 2223333
模式A | B | C | D
与A
、B
、C
或D
中的一个匹配
因此,生成的正则表达式匹配任何排列,每个项重复任意次数(包括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
搜索字符串,用'.*
分隔传入字符串中的每个字符,并用'.
删除每个排列
如果该代码行中的任何步骤让您感到困惑,请查看每个组件的文档
您试过运行它吗?
'(%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)'
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)'