将Javascript RegEx转换为C#Regex

时间:2018-04-27 06:24:30

标签: javascript c# regex

我有一个Javascript正则表达式,用于对句子中的单词进行标记,如下所示:

/\\[^]|\.+|\w+|[^\w\s]/g

  

如果像Hello World.那样输入句子,就像上面的正则表达式一样   将其标记为单词:

     

HelloWorld.

我正在尝试在C#中转换上述正则表达式,但它无法对其进行分组。我尝试分别从开头和结尾删除/\g,以使其与.NET正则表达式引擎兼容。但它仍然无效。

以下是我正在尝试的C#代码:

public static void Main()
{
        string pattern = @"\\[^]|\.+|\w+|[^\w\s]";
        string input = @"hello world.";

        foreach (Match m in Regex.Matches(input, pattern, RegexOptions.ECMAScript))
        {
            Console.WriteLine("'{0}' found at index {1}.", m.Value, m.Index);
        }
}

有人可以帮助我将上述正则表达式转换为C#吗?

1 个答案:

答案 0 :(得分:3)

请注意,RegexOptions.ECMAScript只是确保速记字符类(此处为\w\s)仅匹配ASCII字母,数字和空格。您不能指望此选项“转换”整个模式以在.NET正则表达式库中使用。

这里,在JS regex中使用[^]构造来匹配任何char。您可以将.RegexOptions.Singleline选项一起使用(然后必须删除RegexOptions.ECMAScript选项)而不是[^],或者只是使用[\s\S]匹配任何字符:

public static void Main()
{
        string pattern = @"\\.|\.+|\w+|[^\w\s]";
        string input = @"hello world.";

        foreach (Match m in Regex.Matches(input, pattern,  RegexOptions.Singleline))
        {
            Console.WriteLine("'{0}' found at index {1}.", m.Value, m.Index);
        }
}

请参阅C# demo,其输出:

'hello' found at index 0.
'world' found at index 6.
'.' found at index 11.

注意\w\s在.NET regex中具有Unicode感知功能,所有Unicode字母都与某些变音符号相匹配。如果您只想处理ASCII,请使用

string pattern = @"\\.|\.+|[A-Za-z0-9_]+|[^A-Za-z0-9_\f\n\r\t\v\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]";

更多详情