谁能向我解释一下这个正则表达式的含义?(Python)

2024-04-24 06:39:04 发布

您现在位置:Python中文网/ 问答频道 /正文

s = "hi mom, *please* send more *money*, luv!"
p = r"\*([^\*]+)\*"

print( "s = '", s, "'", sep = "" )
s = re.sub( p, r"<em>\1</em>", s )
print( "s = '", s, "'", sep = "" )

输出为:

s = 'hi mom, *please* send more *money*, luv!'

s = 'hi mom, <em>please</em> send more <em>money</em>, luv!'

我真的不明白发生了什么。我想我明白这一点 p = r"\*([^\*]+)\*",r代表一个原始字符串,当这个r前缀出现时,“一个紧跟着反冲的字符被包含在字符串中,没有任何变化。”好的,到目前为止还不错。因此p中的第一个和最后一个*将被转义,这意味着它们将包含在字符串中。我明白了。我知道()中的括号用于匹配,但也用于表示组的开始和结束。我还假设s = re.sub(p , r"<em>\1</em>", s)中的“1”与组有关。但是…我不知道,只是不是所有的东西都在一起,我真的不明白我们是怎么得到第二根弦的。有人能帮我解决这个问题吗?你知道吗


Tags: 字符串resendmore代表hi字符sep
2条回答
p = r"\*([^\*]+)\*"

这意味着在两个*之间,匹配一个或多个不是(^)a*的字符

If the first character of the set is '^', all the characters that are not in the set will be matched. For example, [^5] will match any character except '5', and [^^] will match any character except '^'. Source: Python Documentation

s = re.sub( p, r"<em>\1</em>", s )

用<;em>;组1<;/em>;替换匹配的字符串,即*please*;。第1组是在()之间捕获的所有内容,即请和钱。正则表达式中只有一个组,如果有多个组,则使用\2获取第二个组的内容,依此类推。你知道吗

*是正则表达式中的一个特殊字符,因此r"\*"对re引擎的*进行转义,以便它知道它正在查找文本*

[^\*]+表示1个或多个非文字星号的字符

\1表示捕获组(括号之间的内容)

https://www.debuggex.com/r/tety3IA93jSB1iah演示正则表达式匹配。。较暗的突出显示与捕获组内部匹配

相关问题 更多 >