gpt4 book ai didi

python - 我可以在不使用 re.DOTALL 的情况下匹配 python 中的多行字符串吗?

转载 作者:行者123 更新时间:2023-11-30 23:13:57 24 4
gpt4 key购买 nike

我正在尝试用 python 编写一个简单的词法分析器。我正在使用正则表达式来做到这一点。所以,我需要一个匹配多行注释的正则表达式:

/* first line.
the second line
The last line. */

通过使用此模式:

pattern = r"/\*.*\*/" 

并使用

进行编译
regex = re.compile(pattern,re.DOTALL) 

它有效。

现在,我不会使用 re.DOTALL ,因为这也适用于单引号字符串。有没有办法编译这个表达式以便在没有 re.DOTALL? 的情况下工作

最佳答案

您可以通过使用像这样的小技巧来实现相同的目的[\s\S]

[\s\S] 背后的想法是捕获所有内容,因此您可以使用显式模式来界定您想要的内容。例如:

/\*        <--- Match /*
[\s\S]*? <--- Match everything (ungreedy)
\*/ <--- Match */

您可以使用这样的正则表达式:

/\*[\s\S]*?\*/

如果您想捕获评论中的内容,那么您可以这样做:

/\*([\s\S]*?)\*/

<强> Working demo

您可以在下面看到这个技巧的工作原理:

enter image description here

顺便说一句,您使用的贪婪正则表达式 /\*.*\*/ 会错误地匹配注释。例如,如果您有:

/* A */
/* B */

您的正则表达式将错误地匹配/* A *//* B */。您必须添加 ? 将其设置为不贪婪,如下所示:

/\*.*?\*/
^--- ungreedy

关于python - 我可以在不使用 re.DOTALL 的情况下匹配 python 中的多行字符串吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29020866/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com