.net 正则表达式以匹配任何垂直空格

.net 正则表达式以匹配任何垂直空格,.net,regex,perl,whitespace,multiline,.net,Regex,Perl,Whitespace,Multiline,是否有一个.NET的正则表达式模式可以匹配任何会产生多行的字符,即任何垂直空白字符,就像perl正则表达式对\v所做的那样?换句话说,是否有方法匹配\r(回车)、\n(换行符)、\v(垂直选项卡)和\f(换行符)以及Unicode字符U+0085(下一行)、U+2028(换行符)和U+2029(换行符)还有其他我不知道的字符可能会导致不止一行 我正在.NET中编写一些验证代码,如果用户提供的输入文本包含多行内容,则验证代码将失败。在大多数情况下,这意味着我只需要检查\r和\n。然而,我知道还有很

是否有一个.NET的正则表达式模式可以匹配任何会产生多行的字符,即任何垂直空白字符,就像perl正则表达式对
\v
所做的那样?换句话说,是否有方法匹配
\r
(回车)、
\n
(换行符)、
\v
(垂直选项卡)和
\f
(换行符)以及Unicode字符
U+0085
(下一行)、
U+2028
(换行符)和
U+2029
(换行符)还有其他我不知道的字符可能会导致不止一行

我正在.NET中编写一些验证代码,如果用户提供的输入文本包含多行内容,则验证代码将失败。在大多数情况下,这意味着我只需要检查
\r
\n
。然而,我知道还有很多其他的垂直方向


我知道,最重要的是.NET中的
\v
匹配“垂直选项卡”,而它匹配perl正则表达式中的“垂直空白”。

如果要匹配任何未知项,只需我们不设置
[^]
(至少在.NET中,我的perl有点模糊)来匹配特定字符。例如,如果我想在一行中的当前位置与以字母
D
开头的下一行之间匹配空格,我会使用

([^D]+)


因此,匹配捕获将包括字母D之前的每种类型的空格。

正如您所说,Perl字符类
\v
匹配
[\x0A-\x0D]
(换行符、垂直制表符、换行符和回车符(尽管我不认为CR是垂直空格))以及非ASCII码点
[\x{2028}\x{2029}]
(行分隔符和段落分隔符)

您可以像这样在.NET中手工构建这个角色类

[\u0A-\u0D\u2028\u2029]

on re类声称perl正则表达式引擎在
\v
上的行为符合要求(我没有根据经验进行检查)。您使用的正则表达式方言是什么?您的编程语言(和版本)是什么?perl的
\v
是否适合您?(请参阅该类中的字符列表。)根据,在@ChristopherCreutzig评论中的链接后面的列表是详尽的(\x0a-\x0d,\x85,u+2028,u+2029)。您可以在Perl中使用表示通用换行符的
\R
。@roryap:我很乐意提供帮助。我修改了您的问题,将最后一段移到开头。我认为它仍然读得很好。似乎没有读到最后的人读错了。@roryap:您可能认为写为[\r\v\f\n\u2028\u2029]。我认为没有一种方法可以使用Unicode名称将字符添加到.NET字符串中,这将是一种理想的方法。再次感谢。太糟糕了。对于垂直空格,
\v
而言,.NET没有像perl那样的单个字符转义,但是,正如您指出的那样,这只适用于ASCII,不包括两个额外的Unicode字符字符
\u2028
u2029
@roryap:你误解了我:这六个代码点是Perl的
\v
字符类匹配的。Perl的字面等价物应该是
[\r\N{垂直制表}\f\N\N{行分隔符}\N{段落分隔符}]
。这不是一个确定的垂直空白字符列表,如果您发现其他字符会造成麻烦,您可能希望添加到其中。啊,我当时误读了。您说“正如您所说,Perl字符类\v匹配[\x0A-\x0D]”,我解释为是详尽的,但您后来说“如果您还对非ASCII码点感兴趣,那么它包括[\x{2028}\x{2029}]”