Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Javascript正则表达式转换为C#正则表达式_Javascript_C#_Regex - Fatal编程技术网

将Javascript正则表达式转换为C#正则表达式

将Javascript正则表达式转换为C#正则表达式,javascript,c#,regex,Javascript,C#,Regex,我有一个Javascript正则表达式,它标记了一个句子中的单词,如下所示: /\\[^]\.+\w+\[^\w\s]/g 例如,如果输入一个句子,例如helloworld.上面的正则表达式将 将其标记为文字: 你好,世界, 我正在尝试用C#转换上面的正则表达式,但它无法将其分组。我已尝试从开头和结尾分别删除/和\g,以使其与.NET正则表达式引擎兼容。但它仍然不起作用 下面是我正在尝试的C代码: public static void Main() { string patter

我有一个Javascript正则表达式,它标记了一个句子中的单词,如下所示:

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

例如,如果输入一个句子,例如
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#

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

这里,JS正则表达式中使用了
[^]
构造来匹配任何字符。您可以将
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);
        }
}
请参见,其输出:

'hello' found at index 0.
'world' found at index 6.
'.' found at index 11.
注意
\w
\s
在.NET正则表达式中支持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]";
更多详细信息

  • 在.NET正则表达式中
  • 在.NET正则表达式中

它不起作用,我得到了一个
System.ArgumentOutOfRangeException:指定的参数超出了有效值的范围。
我没有检查代码,但正则表达式正常。让我添加一个演示。是的,我需要改变我的正则表达式以使其与.NET兼容吗?要标记这样的句子,你可以使用你有的正则表达式。现在它的工作方式会有所不同,因为.NET正则表达式库中的
\w
\s
支持Unicode。如果您只想处理ASCII,请使用
string pattern=@“\.\.\.\.+.+.[A-Za-z0-9\+.[^A-Za-z0-9\\uf\n\r\t\v\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]”@KunalMukherjee试试。
@“[-+]?\d*\.?\d+(\d[-+]?\d+)?\ \w+[^\w\s]”
模式将标记为数字、单词和单个标点/符号字符。