【发布时间】:2021-02-15 05:28:12
【问题描述】:
我正在使用 C# 交互,这里是设置:
#r "System.Text.RegularExpressions"
using System.Text.RegularExpressions;
string s = "Number 42" + Environment.NewLine + "and 1 number 3";
我希望在行尾或字符串末尾的所有数字周围添加括号(42 和 3 都应该有括号)。
注意:在我的系统上
Environment.NewLine是\r\n
所以我尝试Regex.Replace(s, "(\\d+)$", "[$0]", RegexOptions.Multiline) 并且只有 3 个被包装。
如果我这样做 Regex.Replace(s, "(\\d+)\r?$", "[$0]", RegexOptions.Multiline) 两者都被包裹,但一个在括号内有一个额外的 \r。所以正则表达式引擎相信 Environment.NewLine 是 \n 的谎言。
是否有单独的 Environment.NewLine 设置仅用于正则表达式?如果是这样,我该如何设置?
【问题讨论】:
-
@WiktorStribiżew 但不应该是不必要的吗?
-
$只是在寻找\n但Environment.NewLine是\r\n所以(\\d+)$是不够的,因为\r把你搞砸了。 -
这里有类似的问题:stackoverflow.com/q/8618557/5311735。简而言之,它就是这样工作的,可能是因为正则表达式在 .NET 之前有很长的历史,所以要与所有其他实现保持一致。
-
@Evk 这是一个值得欺骗的目标。
-
实际上,这只是该线程的部分欺骗,因为在这里,数字必须用括号括起来而没有 CR 符号(当前的 OP 正则表达式实际上并没有满足 OP 的需要)。