gpt4 book ai didi

c# - SingleLine 选项和\n 字符串结尾之前的正则表达式问题

转载 作者:行者123 更新时间:2023-12-02 13:56:14 26 4
gpt4 key购买 nike

我正在尝试匹配文件的某个结尾,其中“文件的某个结尾”可能会跨越多行。

我的正则表达式如下所示:

"\s\w$" 

我想要做的:查找所有以空格字符结尾的文件,并在文件的最末尾加上“人类可读字符”。

Regex.IsMatch("arbitrarytext a\n",@"\s\w$")

问题是它也匹配以下字符串:

"arbitrarytext a\n"

我还尝试了 RegexOptions.SingleLine - 尽管这只会改变点“.”的匹配行为。

如何重写我的正则表达式,使其仍然满足我的需求,但与上面给出的示例不匹配。

其次,我也对它与示例完全匹配的原因感兴趣。

使用:.Net 3.5 SP1(如果感兴趣的话)。

最佳答案

问题是 $ 匹配字符串末尾最后一个换行符(如果有的话)之前。除非您使用 RegexOptions.Multiline,否则 $\Z 含义相同。

使用 \z 代替:

Regex.IsMatch("arbitrarytext a\n",@"\s\w\z")

将会失败。

另请参阅 tutorial about anchors ,特别是“以换行符结尾的字符串”部分。

简短概述:

Symbol  means...                                       if multiline mode is...
------------------------------------------------------------------------------
^ Start of string off (default*)
^ Start of current line on
\A Start of string irrelevant
$ End of string, before final newline, if any off
$ End of current line, before newline, if any on
\Z End of string, before final newline, if any irrelevant
\z End of string irrelevant

*: In Ruby, multiline mode is always on. Use \A or \Z to get ^ or $ behavior.

关于c# - SingleLine 选项和\n 字符串结尾之前的正则表达式问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8517591/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com