gpt4 book ai didi

c# - 为什么 C# RegEx 类不尊重 Environment.NewLine?

转载 作者:行者123 更新时间:2023-12-03 23:42:57 25 4
gpt4 key购买 nike

我正在使用 C# 交互式,这里是设置:

#r "System.Text.RegularExpressions"
using System.Text.RegularExpressions;
string s = "Number 42" + Environment.NewLine + "and 1 number 3";
我希望在一行的末尾或字符串的末尾(42 和 3 都应该得到括号)的所有数字周围添加括号。

Note: on my system Environment.NewLine is \r\n


所以我试试 Regex.Replace(s, "(\\d+)$", "[$0]", RegexOptions.Multiline)并且只有 3 个被包裹。
如果我这样做 Regex.Replace(s, "(\\d+)\r?$", "[$0]", RegexOptions.Multiline)两者都被包裹,但一个在括号内有一个额外的\r 。所以正则表达式引擎相信 Environment.NewLine 的谎言是 \n .
是否有单独的 Environment.NewLine只为正则表达式设置?如果是这样,我该如何设置?

最佳答案

$ anchor 是一个正则表达式结构。 Environment.NewLine (“\r\n 用于非 Unix 平台,或 \n 用于 Unix 平台”)不是从正则表达式库中引用的,而是一个单独的属性。
您可以使用

Regex.Replace(s, @"\d+(?=\r?$)", "[$&]", RegexOptions.Multiline)
regex demo :
enter image description here
详情
  • \d+ - 1+ 位数
  • (?=\r?$) - 后跟一个可选的 CR,然后是行尾。

  • 重点是当你使用 RegexOptions.Multiline $ anchor 匹配 LF ( \n ) 符号之前的位置。没有办法重新定义这种行为。 Environment.NewLine在 Windows 中插入 CRLF行结束序列,所以你得到 \r\n作为行尾。因此,添加 \r?之前 $是匹配行尾位置的有效方法。

    关于c# - 为什么 C# RegEx 类不尊重 Environment.NewLine?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64647546/

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