【问题标题】:C# Regex match a french special characterC#正则表达式匹配一个法语特殊字符
【发布时间】:2012-05-04 16:27:55
【问题描述】:

是否有可能编写一个正则表达式来匹配“c”或“ç”以适用于两个示例,例如

var a = "ca va";
var b = "ça va";
Regex.Match(a,"\b(ca\sva)").Success // Match
Regex.Match(b,"\b(ça\sva)").Success // Dont match

谢谢

【问题讨论】:

  • 你的代码可以正常工作(在添加@以避免编译错误之后)
  • 我有 2 场比赛。而且您在正则表达式中的字符串常量之前缺少 @ 符号。
  • @L.B.:不仅仅是编译错误。如果没有@\b 表示“匹配退格字符”。
  • 问题不在编译,问题在匹配。当用户键入“ca va”或“ça va”时,我想在两种情况下都匹配这个“ça va”
  • @Constantine 然后使用@"\b([çc]a\sva)"

标签: c# regex special-characters


【解决方案1】:

对我来说,以下代码在任何一种情况下都返回 true:

using System;
using System.Text.RegularExpressions;

namespace FrenchRegex
{
    class Program
    {
        static void Main(string[] args)
        {
            var a = "ca va";
            var b = "ça va";

            var regex = @"\b((c|ç)a\sva)";

            var matchA = Regex.Match(a, regex).Success;
            var matchB = Regex.Match(b, regex).Success;

            Console.WriteLine("Matches '" + a + "': " + matchA);
            Console.WriteLine("Matches '" + b + "': " + matchB);

            Console.ReadKey();
        }
    }
}

我复制并粘贴到 VS2010 中,因此您可能需要执行相同操作才能重现我的结果。

无论如何,我认为匹配“ça va”和“ca va”的正则表达式将是\b([cç]a\sva)

【讨论】:

  • 我不确定这是否更好。不确定正则表达式解析器如何在后台工作,但我认为字符类 ([]) 将需要更多开销,即使是少量开销,也比由管道分隔的一组文字。
  • 没错,谢谢! @BrianWarshaw 我怀疑在这种情况下,性能比可读性更受关注,而且这样我不会引入比原始版本更多的反向引用组。
  • 我不知道。 . .我认为保持它们的精简通常是一个好主意——如果可以的话,最好不要养成编写效率较低的表达式的习惯。但这是我的意见,我想我可以把它贴在耳朵里:-)
  • 好吧,为了完整起见:@BrianWarshaw 我相信建议\b((c|ç)a\sva),它也适用于上述代码。
猜你喜欢
  • 2021-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-28
  • 2017-12-17
  • 2022-11-17
相关资源
最近更新 更多