C#正则表达式不匹配我的字符串

问题描述:

我有一个正则表达式字符串:C#正则表达式不匹配我的字符串

string regex = 
       "\"\\d*\",\"(?<url>\\w|\\d|[().,-–_'])\".*"; 

和一个字符串我想匹配它:

string line = 
    "\"4\",\"1800_in_sports\",\"24987709\",\"\",\"1906\",\"20171028152258\""; 

当我试图让URL类别,甚至检查匹配,不匹配:

var result = Regex.Match(line, regex); 
string output = result.Groups["url"].Value; 

,如果我尝试Regex.IsMatch(..)也返回false。 我用http://regexstorm.net/tester来测试这个和它在那里工作,但是,当我运行的代码。

在RegexStorm我所用的模式:

"\d{1,3}","(?<url>\w|\d|\n|[().,-–_'])+?" 
+1

请使用[逐字符串](https://*.com/questions/3311988/)并告诉我们您在RegexStorm中使用的表达式。 –

+0

好吧,我没有意识到您可以在逐字串中使用双引号,我会尝试。谢谢。 我也编辑了这个问题,以包含我在RegexStorm中使用的模式。 –

正如Dour High Arch所提到的,应该使用逐字字符串。在双引号前添加双引号允许逐字字符串。

更改字符串的正则表达式:

string regex = 
       @"""\d{1,3}"",""(?<url>\w|\d|\n|[().,-–_''])+?"""; 

现在返回匹配。

替换\\ d只用\ d和\\ W只\ W上。

+0

由于“无法识别的转义序列”,这将无法编译。如果我将$添加到字符串的开头,我不能添加\“。 –

+0

\ d表示匹配一个数字,\\ d表示匹配”\ d“,您希望前者不是后者 –

+0

当使用Regex读取字符串它看到“\ d”而不是“\\ d”。例如, string regex =“\”\\ d * \“”;会起作用。 –