在正则表达式中特殊地使用’*’

在编写正则表达式模式时,将所有连续体’1’和单个’1’替换为’s’.我发现这很混乱,”(用于匹配1或更多)的使用给出了预期的结果,但’*’给出了奇怪的结果
>>> l='100'
>>> import re
>>> j=re.compile(r'(1)*')    
>>> m=j.sub('*',l)
>>> m
'*0*0*'

虽然”的使用给出了预期的结果.

>>> l='100'
>>> j=re.compile(r'1+')
>>> m=j.sub('*',l)
>>> m
'*00'

正则表达式中的’*’如何给出这个,而它的行为是匹配0或更多.

(1)*表示“匹配0或更多1”.因此,对于100,它匹配1,0和0之间的空字符串,以及最后0之后的空字符串.然后用’*’替换空字符串. 1在匹配中至少需要一个1,因此它与字符之间的边界不匹配.

对于那些好奇的读者,是的python输出是* 0 * 0 *而不是** 0 * 0 *.这是一个测试python script. (Regex101的输出错误,因为它不使用实际的python正则表达式引擎.在线正则表达式测试人员通常会使用PCRE(在PHP和Apache HTTP Server中提供),并伪造目标正则表达式引擎.总是测试你的正则表达式在实时代码!)

在这里,您可以在JavaScript中看到输出将是** 0 * 0 *(它将匹配1和0之间的空字符串作为新匹配)这是“正则表达式风格”为何重要的一个主要示例.不同引擎使用略有不同的规则. (在这种情况下,如果新匹配从0开始或字符边界)

console.log("100".replace(/(1)*/g,'*'))

相关文章

正则替换html代码中img标签的src值在开发富文本信息在移动端...
正则表达式
AWK是一种处理文本文件的语言,是一个强大的文件分析工具。它...
正则表达式是特殊的字符序列,利用事先定义好的特定字符以及...
Python界一名小学生,热心分享编程学习。
收集整理每周优质开发者内容,包括、、等方面。每周五定期发...