【问题标题】:Advice on refactoring a regex character class subtraction关于重构正则表达式字符类减法的建议
【发布时间】:2012-02-04 11:05:49
【问题描述】:

Mono 的 Regex 实现有一个错误,这意味着它不能正确处理 regex 字符类减法。

IE:“[ab-[a]]”实际上应该是字符集“[b]”。

例如,.NET 上的以下代码将输出“The\ncat\nsat\non\nthe\nmat”。
此示例包含我尝试在单声道上使用的简化正则表达式。

string listOfUnicodeChars = "\u2e80";  
string patten =  
"[\\p{Lu}\\p{Ll}\\p{Lt}\\p{Lo}‌‍\\p{Mn}\\p{Mc}\\p{Lm}-[" + listofUnicodeChars +"]]+";

Regex regex = new Regex(pattern);
foreach (var match in regex.Matches("The cat sat on the mat."))
   Console.WriteLine(match);

但使用单声道,正则表达式不匹配。

是否有人对如何使用不同方式编写的正则表达式获得相同的效果有任何建议?

【问题讨论】:

  • 您的模式中是否缺少括号?

标签: c# .net regex mono


【解决方案1】:

您是否考虑过使用negative lookahead?如:

"(?![" + listOfUnicodeChars + "])[\\p{Lu}" + ... + "]"

【讨论】:

  • 感谢您的示例和链接。负前瞻似乎在单声道上效果很好。
  • +1。所以完整的正则表达式是"(?:(?!EXCLUDE)INCLUDE)+",其中 INCLUDE 和 EXCLUDE 是你的两个字符类。
  • 对。我的示例只匹配一个字符。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-02
  • 2021-11-03
  • 1970-01-01
  • 1970-01-01
  • 2015-05-23
  • 2017-06-03
相关资源
最近更新 更多