(^\s*\d+\)(.*) | ) | (^\s*Q\d+\.\s*(.*))
上述正则表达式与Q1. qeqwewqeqeq qerqer
但如果我在|
(^\s*\d+\)(.*) | )|(^\s*Q\d+\.\s*(.*))
匹配我的字符串。
空白是什么意思?它等于\s
吗?它会影响我的可读性。
答案 0 :(得分:3)
是的,空白会影响你的正则表达式。不,它不等同于\s
。
\s
shorthand character class等同于字符类[ \t\r\n\f]
- 即与任何空白字符匹配的字符类。因此,虽然\s
中的格式空间包含,但它们与等效。
正如评论中所说,文字空白在正则表达式中很重要。事实上,我认为它会导致您的第一个替代(子模式(^\s*\d+\)(.*) | )
)出错。
如果我正在阅读该子图案的意图,那么它应该匹配表格的文本
2) some_text
但它会:
构造这个子模式的更好方法是(^\s*\d+\)(.*))
,完全处理结束空间和交替。此外,为了提高可读性,我们可以这样做:
(^\s*(?:Q\d+\.|\d+\))\s*(.*))
其中只替换问题编号格式,而不是整个模式。
答案 1 :(得分:2)
正则表达式的内容100%适用于确定输入是否匹配。你的想象力不会改变正则表达式处理。
正则表达式" \ dignore这部分\ d"将不符合输入" 12"但是会匹配输入" 1ignore this part2"。无论想象多少,都忽略了这部分"将被跳过,它仍然是正则表达式的一部分。
在您的情况下,额外的空格是您的形式"忽略此部分"。
答案 2 :(得分:1)
在正则表达式模式中,空格是与空格匹配的有意义的原子。如果您需要使用空格和制表符和换行符来格式化您的模式 - 使用空格而不会被正则表达式引擎考虑 - 您可以使用(?x)
修饰符或{{3国旗。
然后,要使用(?x)
选项匹配此类模式中的文字空间,您需要转义空格以匹配文字空格。或者,您可以考虑将任何空格与\s
匹配:
\s A whitespace character: [ \t\n\x0B\f\r]
请注意,如果您添加(?U)
修饰符,Pattern.COMMENTS
标记,\s
将匹配所有Unicode空白(例如[\p{Zs}\t\r\n]
)。