Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.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_String - Fatal编程技术网

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']