Python在模式开始时使用metamatcher重新匹配正则表达式
我有一个代码可以动态创建要匹配的重模式,但其中一个代码会产生一个问题:Python在模式开始时使用metamatcher重新匹配正则表达式,python,regex,re,Python,Regex,Re,我有一个代码可以动态创建要匹配的重模式,但其中一个代码会产生一个问题: pattern=re.compile(“*sauce”) 告诉我错误:在位置0处无需重复 当星星在其他地方时,它工作得很好。我试图匹配任何一个单词来代替*。我试图查找正则表达式模式,但找不到可以替换它的东西 示例: “*酱汁” #应匹配: “苹果酱” “芥末酱” #或 “蓝色*红色” #应匹配: “蓝色和红色” “蓝色还是红色” 等等。我已经有一段时间没有处理regex了,但我相信*意味着它将尝试匹配前面块或字符的0到n
pattern=re.compile(“*sauce”)
告诉我错误:在位置0处无需重复
当星星在其他地方时,它工作得很好。我试图匹配任何一个单词来代替*。我试图查找正则表达式模式,但找不到可以替换它的东西
示例:
“*酱汁”
#应匹配:
“苹果酱”
“芥末酱”
#或
“蓝色*红色”
#应匹配:
“蓝色和红色”
“蓝色还是红色”
等等。我已经有一段时间没有处理regex了,但我相信
*
意味着它将尝试匹配前面块或字符的0到n个数字。由于在本例中,*
之前没有任何内容,因此您将遇到该错误。您可以通过在*
前面放置一些字符或转义*
字符来修复它
编辑
看过这个例子后,我想如果你不在乎空间的话,你需要你的正则表达式模式是
*sauce
或者*sauce
。在正则表达式中*
意味着出现的次数是0或更多次
因此,如果您允许任何病房,那么您需要使用\w
\w允许[a-zA-Z0-9.]
字符
如果要允许包含这些字符的任何单词,请使用:\b\w+\b
如果你的单词由任何字符组成,那么你可以使用*
所以你可以试试
'\b\w+\b?酱汁“
还是”*?谢谢,你的回答也很好!就像另一个一样。它工作得很好