【问题标题】:Regular expression that excludes carriage return returns a match with carriage return排除回车的正则表达式返回与回车匹配
【发布时间】:2014-12-31 16:40:56
【问题描述】:

考虑以下 C# 代码:

string s = System.IO.File.ReadAllText("C:\\_Temporary\\MyFile.txt");
var reg = new System.Text.RegularExpressions.Regex("\"Second\" -- (.+)");
var val = reg.Match(s).Groups[1].Value;

或者这个在 VB.NET 中:

Dim s = System.IO.File.ReadAllText("C:\_Temporary\MyFile.txt")
Dim reg = New System.Text.RegularExpressions.Regex("""Second"" -- (.+)")
Dim val = reg.Match(s).Groups(1).Value

还有C:\_Temporary\MyFile.txt的内容:

“First”——这是我的第一个项目。

“第二个”——这是我的第二个项目。

“第三”——这是我的第三项。

如果 RegEx 元字符 . 排除了所有行尾字符(并且确实阻止了匹配返回 "Second" -- here is my second item. 下面的其余内容),为什么 val 以回车(\r)?

【问题讨论】:

  • \r 从什么时候开始表示换行符?哦,对了,Windows 逻辑。

标签: c# .net regex vb.net


【解决方案1】:

根据Microsoft's .NET 4.5 Regex. 是一个“通配符:匹配除\n 之外的任何单个字符。

【讨论】:

  • SingleLine 标志控制此行为
  • 我引用了regular-expressions.info/dot.html,特别是“点匹配单个字符,而不关心该字符是什么。唯一的例外是换行符。”。我将“换行符”解释为所有换行符。
  • 是的,不幸的是,不是每个人都使用相同的正则表达式规则。 .NET 决定只包含 换行符 \n
  • 感谢您的帮助:)
  • @ryanyuyu Javascript 具有与 .NET 相似的正则表达式规则
猜你喜欢
  • 1970-01-01
  • 2013-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-14
  • 2022-01-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多