Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在这个python表达式中,%的含义是什么_Python_Regex - Fatal编程技术网

在这个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

有人能解释一下这个正则表达式是什么意思吗?我正在查看其他人的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)'
首先,它生成输入的所有排列(唯一顺序):

对于其中的每一项,它都将每个项转换为字符串,并使用
*

'.*'.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)'