Regex 在正则表达式模式中使用多个变量

Regex 在正则表达式模式中使用多个变量,regex,string,variables,Regex,String,Variables,我已经定义了许多表示日语字符串的变量。 我想创建一个正则表达式模式,它将查找这些字符串模式中的任何一种,但不包括 以任何特定的顺序。例如, kata_a='2〕エイ' kata_b='2〕ビー' ... (也为c-z定义) 为了可读性,我希望能够搜索kata_a或kata_b或kata_c等… 抱歉,我对regex非常陌生,但我不知道如何创建一个模式来分别或组合捕获这些序列。我尝试了(kata|a | kata|b),试图只尝试前两个,但出现了语法错误。还尝试了((kata_a)|(kata_b

我已经定义了许多表示日语字符串的变量。 我想创建一个正则表达式模式,它将查找这些字符串模式中的任何一种,但不包括 以任何特定的顺序。例如,
kata_a='2〕エイ'
kata_b='2〕ビー'
... (也为c-z定义)

为了可读性,我希望能够搜索kata_a或kata_b或kata_c等…
抱歉,我对regex非常陌生,但我不知道如何创建一个模式来分别或组合捕获这些序列。我尝试了
(kata|a | kata|b)
,试图只尝试前两个,但出现了语法错误。还尝试了
((kata_a)|(kata_b))
。那也没用

顺便说一句,我在Python3.3中使用regex模块,所以我使用:
pattern=regex.compile(???)


谢谢。

首先,空格在正则表达式中很重要,因此如果在正则表达式中放置空格,它将尝试匹配正在使用它的文本中的空格

其次,Python不会自动执行变量插值。但你可以做类似的事情

words = ['エイ', 'ビー']  # add more words ad libitum
pattern = re.compile("(" + "|".join(words) + ")")

这里不严格要求使用括号,但如果在正则表达式中添加了其他内容,则必须使用括号,因此为了安全起见,我将括号放在这里。

您的变量是字符串。不能使用“逻辑或”字符串,但可以将它们与介于两者之间的字符串
“|”
连接起来,以形成一个与任一字符串匹配的新正则表达式

pattern = regex.compile(kata_a + '|' + kata_b)

我认为我的答案没有上面的那么优雅,但我确实做到了

卡塔阿エイ' 卡塔乌ビー' (等等)

args=(kata_a、kata_b等)

kata_字母=''{0}}{1}…'''.格式(*args) [需要三重引号,因为它运行多行]

最后

matches=regex.findall(kata_字母,搜索_目标)


然而,我认为简单地加入上面描述的列表要简单得多。感谢您的所有输入。

您的片假名字符串是。。。奇怪的当然,英文字母a单独读作“ei”,但是。。。你想实现什么?如果我理解正确,要编译的模式本身必须是一个字符串,尽管字符串中可以包含|。谢谢你解释为什么错了。