2024-05-14 22:00:48 发布
网友
(^\s*\d+\)(.*) | ) | (^\s*Q\d+\.\s*(.*))
上面的正则表达式与Q1. qeqwewqeqeq qerqer不匹配
Q1. qeqwewqeqeq qerqer
但是如果我去掉|前后的空白
|
(^\s*\d+\)(.*) | )|(^\s*Q\d+\.\s*(.*))
它和我的线吻合。你知道吗
空白是什么意思?它等于\s吗?它影响我的可读性。你知道吗
\s
是的,空格会影响正则表达式。不,它不等于\s。你知道吗
\sshorthand character class等价于字符类[ \t\r\n\f],即匹配任何空白字符的字符类。因此,虽然格式化空间包含在\s中,但它们并不是等价的。你知道吗
[ \t\r\n\f]
正如在评论中所说的,文本空白在正则表达式中很重要。事实上,我相信这会导致您的第一个备选方案出现错误(子模式(^\s*\d+\)(.*) | ))。你知道吗
(^\s*\d+\)(.*) | )
如果我读对了子模式的意图,它应该匹配表单的文本
2) some_text
但它会:
构造此子模式的更好方法是(^\s*\d+\)(.*)),将结束空间和交替一起处理。此外,为了提高可读性,我们可以这样做:
(^\s*\d+\)(.*))
(^\s*(?:Q\d+\.|\d+\))\s*(.*))
它只在问题编号格式上交替出现,而不是整个模式。你知道吗
Demo on Regex101
正则表达式的内容100%适用于确定输入是否匹配。你的想象力不会改变正则表达式的处理。你知道吗
正则表达式“\dignore this part\d”将与输入“12”不匹配,但与输入“1ignore this part2”匹配。不管在想象中“忽略这部分”会被跳过多少,它仍然是正则表达式的一部分。你知道吗
在你的例子中,多余的空格是“忽略这部分”的形式。你知道吗
在正则表达式模式中,空间是与空间匹配的有意义的原子。如果您需要使用空格、制表符和换行符格式化您的模式—使用正则表达式引擎不会考虑的空格—您可以使用(?x)修饰符或^{}标志。你知道吗
(?x)
然后,要用(?x)选项匹配这种模式中的文本空间,需要转义空间来匹配文本空间。或者,您可以考虑将任何空格与\s匹配:
\s A whitespace character: [ \t\n\x0B\f\r]
注意,如果添加(?U)修饰符,^{}标志,\s将匹配所有Unicode空白(如[\p{Zs}\t\r\n])。你知道吗
(?U)
[\p{Zs}\t\r\n]
是的,空格会影响正则表达式。不,它不等于
\s
。你知道吗\s
shorthand character class等价于字符类[ \t\r\n\f]
,即匹配任何空白字符的字符类。因此,虽然格式化空间包含在\s
中,但它们并不是等价的。你知道吗正如在评论中所说的,文本空白在正则表达式中很重要。事实上,我相信这会导致您的第一个备选方案出现错误(子模式
(^\s*\d+\)(.*) | )
)。你知道吗如果我读对了子模式的意图,它应该匹配表单的文本
但它会:
构造此子模式的更好方法是
(^\s*\d+\)(.*))
,将结束空间和交替一起处理。此外,为了提高可读性,我们可以这样做:它只在问题编号格式上交替出现,而不是整个模式。你知道吗
Demo on Regex101
正则表达式的内容100%适用于确定输入是否匹配。你的想象力不会改变正则表达式的处理。你知道吗
正则表达式“\dignore this part\d”将与输入“12”不匹配,但与输入“1ignore this part2”匹配。不管在想象中“忽略这部分”会被跳过多少,它仍然是正则表达式的一部分。你知道吗
在你的例子中,多余的空格是“忽略这部分”的形式。你知道吗
在正则表达式模式中,空间是与空间匹配的有意义的原子。如果您需要使用空格、制表符和换行符格式化您的模式—使用正则表达式引擎不会考虑的空格—您可以使用} 标志。你知道吗
(?x)
修饰符或^{然后,要用
(?x)
选项匹配这种模式中的文本空间,需要转义空间来匹配文本空间。或者,您可以考虑将任何空格与\s
匹配:注意,如果添加} 标志,
(?U)
修饰符,^{\s
将匹配所有Unicode空白(如[\p{Zs}\t\r\n]
)。你知道吗相关问题 更多 >
编程相关推荐