Python中的正则表达式来匹配两个已知字符串之间字符串的多个事件
在下文中Python中的正则表达式来匹配两个已知字符串之间字符串的多个事件,python,regex,string,Python,Regex,String,在下文中 My cow always gives milk. Your cow sometimes produces milk. 我想提取 'always gives', 'sometimes produces' 使用封装字符串“cow”和“milk” 我尝试了下面的“cow(.*)milk”,但只有在第一句话单独出现时才起作用 My cow always gives milk. 在我的例子中,使用该正则表达式返回 always gives milk. Your cow sometimes
My cow always gives milk. Your cow sometimes produces milk.
我想提取
'always gives', 'sometimes produces'
使用封装字符串“cow”和“milk”
我尝试了下面的“cow(.*)milk”,但只有在第一句话单独出现时才起作用
My cow always gives milk.
在我的例子中,使用该正则表达式返回
always gives milk. Your cow sometimes produces
此外,我还尝试了“(?尝试非贪婪选项:
cow(.*?)milk
?
限定符告诉正则表达式引擎尽早停止匹配,而不是贪婪地尝试尽可能多地匹配(这是您在牛奶(.*)中看到的问题)。尝试非贪婪选项:
cow(.*?)milk
?
限定符告诉正则表达式引擎尽早停止匹配,而不是贪婪地尝试尽可能多地匹配(这是您在奶牛(.*)牛奶中看到的问题)。您也可以使用a作为a之间的锚:
>>s='我的母牛总是产奶。你的母牛有时产奶。'
>>>关于findall(r’(?您也可以使用a作为a之间的锚点:
>>s='我的母牛总是产奶。你的母牛有时产奶。'
>>>re.findall(r')(?好的,这很好。但是有没有一种方法可以使两个封装字符串之间有一个空格,它将忽略匹配?。例如,“fooSTRINGbar fooCHAR ACTERSbar”只返回字符串?您可以使用[^]
代替
。(如果你提前指定所有约束条件,你会得到更多有用的答案!)太棒了!是的,我一定忘记了最后一个约束条件。谢谢。@Sal\S
可能比[^]
更好。更直接、更短,唯一的区别是[^]
与其他空格匹配,我无法想象您会想要。好吧,这很好。但是有没有办法使两个封装字符串之间有空格时,它会忽略匹配?例如,“fooSTRINGbar fooCHAR ACTERSbar”只返回字符串?您可以使用[^]
代替
。(如果你提前指定所有约束条件,你会得到更多有用的答案!)太棒了!是的,我一定忘记了最后一个约束条件。谢谢。@Sal\S
可能比[^]
更好。更直接、更短,唯一的区别是[^]
与其他空格匹配,我无法想象您会想要。
fooSTRaINGbar
cow(.*?)milk
>>> s='My cow always gives milk. Your cow sometimes produces milk.'
>>> re.findall(r'(?<=\bcow\b)(.*?)(?=\bmilk\b)', s)
[' always gives ', ' sometimes produces ']
>>> re.findall(r'(?<=\bcow\b)\s*(.*?)\s*(?=\bmilk\b)', s)
['always gives', 'sometimes produces']
>>> s='My cow gives milk. Your cow sometimes produces milk.'
>>> re.findall(r'(?<=\bcow\b)(?=\s*\S+\s*milk\b)\s*(.*?)\s*(?=\bmilk\b)', s)
['gives']
>>> re.findall(r'(?<=\bcow\b)\s*(\S+)\s*(?=\bmilk\b)', s)
['gives']
>>> s='fooSTRINGbar fooCHARACTERSbar'
>>> re.findall(r'(?<=foo)([A-Z]+)(?=bar)', s)
['STRING', 'CHARACTERS']