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”与某个组有关。但是......我不知道,只是不是所有人都在一起而且我真的不明白我们如何得到第二根弦。有人喜欢......通过这个来告诉我吗?
答案 0 :(得分:0)
*
是正则表达式中的一个特殊字符,因此r"\*"
正在为引擎转义*,以便它知道它正在寻找文字*
[^\*]+
表示一个或多个不是文字明星的字符
\1
指的是捕获组(括号之间的任何内容)
https://www.debuggex.com/r/tety3IA93jSB1iah演示正则表达式匹配..深色突出显示是捕获组内匹配的内容
答案 1 :(得分:0)
p = r"\*([^\*]+)\*"
这意味着在两个*之间,匹配一个或多个不是(^)a *
的字符如果集合的第一个字符是'^',则表示所有字符 不在集合中将匹配。例如,[^ 5]将匹配任何 字符除了'5',而[^^]将匹配除'^'之外的任何字符。 Source: Python Documentation
s = re.sub( p, r"<em>\1</em>", s )
将&lt; em&gt; Group 1&lt; / em&gt;替换为匹配的字符串,即* please *。第1组是()之间捕获的所有东西。请&amp;钱。在正则表达式中只有一个组,如果有多个组,则使用\ 2来获取第二组的内容,依此类推。