首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >+apple +香蕉+“婴儿车”-blog的Regex等效

+apple +香蕉+“婴儿车”-blog的Regex等效
EN

Stack Overflow用户
提问于 2012-08-27 08:30:53
回答 1查看 129关注 0票数 0

我做了一个应用程序,我运行以获得一个页面的html,当我得到它时,我必须根据不同的模式将url标记为可用或不可用。这些模式在txt文件中提供:

示例:

代码语言:javascript
复制
+apple+banana+”baby cart” –blog
+”apple skin” +banana +”baby cart” –blog
+”apple skin” +”buy now” +jpg

"指的是短语而不是单词。

  1. html必须包含苹果、香蕉和婴儿车,不能包含博客。
  2. html必须包含苹果皮、香蕉和婴儿车,不能包含博客。
  3. html必须包含苹果皮,现在购买和jpg

问题

在这种情况下我可以使用regex吗?如果是,则上述模式的regex等效值是什么,因此我们可以在txt文件中使用它们,但这些除外,只需将其用作HTML中匹配的模式.

(模式不区分大小写的)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-27 08:42:10

用于至少剖析搜索字符串的示例正则表达式(虽然假设是-"而不是):

代码语言:javascript
复制
(?<operator>[+-])?(?<word>["][^"]+["]|[^\s+-]+)

这与+-及其后面的单词或短语匹配。

快速PowerShell测试:

代码语言:javascript
复制
PS> [regex]::matches($s, '(?<operator>[+-])?(?<word>["][^"]+["]|[^\s+-]+)')|ft -auto

Groups                         Success Captures       Index Length Value
------                         ------- --------       ----- ------ -----
{+apple, +, apple}                True {+apple}           0      6 +apple
{+banana, +, banana}              True {+banana}          6      7 +banana
{+"baby cart", +, "baby cart"}    True {+"baby cart"}    13     12 +"baby cart"
{-blog, -, blog}                  True {-blog}           26      5 -blog

然后,您可以处理它来为您的内容构建正则表达式,例如:

代码语言:javascript
复制
var re = @"(?<operator>[+-])?(?<word>[""][^""]+[""]|[^\s+-]+)";
var matches = Regex.Matches(s, re);

StringBuilder sb = new StringBuilder();
sb.Append("(?i)");
foreach (Match m in matches) {
  sb.Append(string.Format("(?{1}.*{0})",
      Regex.Escape(m.Groups["word"]).Trim('"'),
      m.Groups["operator"] == "+" ? "=" : "!"));
}

var finalRe = sb.ToString();

但是要记住,结果的正则表达式非常慢,特别是对于较长的单词列表。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12138587

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档