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