C# 正则表达式与cpu挂钩
我有4个正则表达式,我得到了旋转,他们的工作非常好,但在一些应用程序,他们是钉出cpu。我知道他们是最漂亮的正则表达式,但我不确定有没有更好的方法。我能做些什么来优化这些正则表达式吗C# 正则表达式与cpu挂钩,c#,.net,regex,C#,.net,Regex,我有4个正则表达式,我得到了旋转,他们的工作非常好,但在一些应用程序,他们是钉出cpu。我知道他们是最漂亮的正则表达式,但我不确定有没有更好的方法。我能做些什么来优化这些正则表达式吗 public static Regex schemaOrg = new Regex(@"\s*itemtype\s*=\s*('|"")\s*http://schema.org/\s*", RegexOptions.Singleline | RegexOptions.IgnoreCase | RegexOption
public static Regex schemaOrg = new Regex(@"\s*itemtype\s*=\s*('|"")\s*http://schema.org/\s*", RegexOptions.Singleline | RegexOptions.IgnoreCase | RegexOptions.Compiled);
public static Regex dataVocabulary = new Regex(@"\s*itemtype\s*=\s*('|"")\s*http://data-vocabulary.org/\s*", RegexOptions.Singleline | RegexOptions.IgnoreCase | RegexOptions.Compiled);
基本上寻找:
itemtype=”http://schema.org/"
itemtype=”http://data-vocabulary.org/"
但是可以使用任意数量的空格,因为这在html中仍然有效
例如:
itemtype=”http://schema.org/"
itemtype=”http://schema.org/"
itemtype=”http://schema.org/ "
都是有效的
更新:仍然包装坏的cpu
\s+itemtype\s*=\s*(?:'|"")\s*http://schema\.org/
一个可能的改进是: 在执行regex.match之前,将所有“”替换为“”
那么您的正则表达式不需要所有这些\s到目前为止,我只能想到一些事情
- 尾随的
(在\s*
和schema.org/\s*
中)不是必需的,请将其删除。我假设这是因为您也没有检查尾随报价词汇表.org/\s*
在regex中有一个特殊的含义,在。(dot)
和schema.org
中像这样对它进行转义data词汇表.org
- 第一个
没有意义,因为它还会将您的模式与\s*
匹配。将其替换为someitemtype
或尝试使用单词边界\s+
作为模式的开头\b
- 如果您对此有疑心,还可以用
替换Regex来阻止它捕获组(?:“|”)
(“|”)
\s+?itemtype\s*?=\s*?(?:'|"")\s*?http://schema\.org/
如果这样做没有帮助,请在这个问题的上下文中发布代码和示例字符串。您是否缺少结尾处的结束语
(“|”)
。@dasblinkenlight:如果有任何问题,它应该是一个结束语\1
@TimPietzcker当然应该(在回答中它会),但在一条评论中,询问OP是否忘记了尾随的引号(“|”)
比反向引用更容易理解。很抱歉,反应太慢,我正在尝试下面的建议,我没有检查后面的引号,因为后面可能会有更多的内容,比如.org/LocalBusiness,我只关心到.orgYou说的
(点)就像一只在复杂正则表达式中的蚂蚁,当它成为URL正则表达式的一部分时,很容易被忽略。这仍然严重影响cpu。我错过了任何变化。在操作中。在发布结果之前,请尝试编辑并(请)实现这两种正则表达式模式。我希望这会有帮助。对不起!在以后的编辑中添加了\s+?
。示例字符串花费时间也会有所帮助。@Adam:如果它是一个文本处理应用程序,为什么你认为文本处理不是应用程序中最昂贵的部分?