Python 使用正则表达式从给定单词开始直到字符串结束(包括换行符)提取字符串的一部分
我知道正则表达式中的Python 使用正则表达式从给定单词开始直到字符串结束(包括换行符)提取字符串的一部分,python,regex,string,Python,Regex,String,我知道正则表达式中的可以是除换行符以外的任何字符,[xy]表示x或y,*字符后的*表示该字符的任何数字,$表示字符串的结尾。那么为什么“伙计们[.\n]*$”不给我“伙计们”.\n你们在干什么?\n我希望你们今晚做个美梦。?你们把句点放在一个字符类中,在这个类中,句点只会匹配一个字符,而不会匹配其他字符[…]表示该类中包含的任何文字字符 您想改用以下选项: 或者,您应该将保留在字符类之外,并将其与\n换行符一起在组中使用: regex = re.compile("guys.*$", re.DOT
可以是除换行符以外的任何字符,[xy]
表示x或y,*
字符后的*
表示该字符的任何数字,$
表示字符串的结尾。那么为什么“伙计们[.\n]*$”
不给我“伙计们”.\n你们在干什么?\n我希望你们今晚做个美梦。
?你们把句点放在一个字符类中,在这个类中,句点只会匹配一个
字符,而不会匹配其他字符<代码>[…]表示该类中包含的任何文字字符
您想改用以下选项:
或者,您应该将
保留在字符类之外,并将其与\n
换行符一起在组中使用:
regex = re.compile("guys.*$", re.DOTALL)
演示:
您将句点放在字符类中,在该类中,句点仅与
字符匹配,而不与其他字符匹配<代码>[…]表示该类中包含的任何文字字符
您想改用以下选项:
或者,您应该将
保留在字符类之外,并将其与\n
换行符一起在组中使用:
regex = re.compile("guys.*$", re.DOTALL)
演示:
使用re.MULLTILINE
,您应该匹配多行
/编辑:正如martjin指出的,我对多行的看法是错误的
>>> regex = re.compile("guys.*",re.DOTALL|re.MULTILINE)
>>> regex.findall(stri)
['guys.\nHow are you doing?\nI hope you have sweet dreams tonight.']
使用re.MULLTILINE
,您应该匹配多行
/编辑:正如martjin指出的,我对多行的看法是错误的
>>> regex = re.compile("guys.*",re.DOTALL|re.MULTILINE)
>>> regex.findall(stri)
['guys.\nHow are you doing?\nI hope you have sweet dreams tonight.']
Martijn的回答很好地解释了你所看到的行为。作为
re.DOTALL
或(?:。\n)
选项的替代方案,您可以使用如下内容:
>>> regex = re.compile("guys.*",re.DOTALL)
>>> regex.findall(stri)
['guys.\nHow are you doing?\nI hope you have sweet dreams tonight.']
由于
\s
表示“所有空白”,而\s
表示“除空白以外的任何内容”,因此将它们放在一个字符类中可以匹配任何字符,包括换行符。Martijn的回答很好地解释了您看到的行为。作为re.DOTALL
或(?:。\n)
选项的替代方案,您可以使用如下内容:
>>> regex = re.compile("guys.*",re.DOTALL)
>>> regex.findall(stri)
['guys.\nHow are you doing?\nI hope you have sweet dreams tonight.']
由于
\s
表示“所有空白”,而\s
表示“除空白以外的任何内容”,因此将它们放在一个字符类中可以匹配包括换行符在内的任何字符。顺便说一句,如果使用标志re.DOTALL
,则点也将匹配换行符(并且可以完全避免使用字符类)。顺便说一下,如果您使用标志re.DOTALL
,则点也将匹配换行符(并且您可以完全避免使用字符类)。re.MULTILINE
仅适用于^
和$
起始和结束锚定附着到的位置。是的,好的。。。我已经错误地使用了一段时间(谢谢:)总是喜欢学习新的re。多行只适用于^
和$
开始和结束锚连接的位置。是的,好的。。。我用错了一段时间(谢谢:)总是喜欢学习新东西
regex = re.compile(r"guys[\s\S]*$")