我做了一个应用程序,我运行以获得一个页面的html,当我得到它时,我必须根据不同的模式将url标记为可用或不可用。这些模式在txt文件中提供:
示例:
+apple+banana+”baby cart” –blog
+”apple skin” +banana +”baby cart” –blog
+”apple skin” +”buy now” +jpg"指的是短语而不是单词。
问题
在这种情况下我可以使用regex吗?如果是,则上述模式的regex等效值是什么,因此我们可以在txt文件中使用它们,但这些除外,只需将其用作HTML中匹配的模式.
(模式不区分大小写的)。
发布于 2012-08-27 08:42:10
用于至少剖析搜索字符串的示例正则表达式(虽然假设是-和"而不是–和”):
(?<operator>[+-])?(?<word>["][^"]+["]|[^\s+-]+)这与+或-及其后面的单词或短语匹配。
快速PowerShell测试:
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然后,您可以处理它来为您的内容构建正则表达式,例如:
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();但是要记住,结果的正则表达式非常慢,特别是对于较长的单词列表。
https://stackoverflow.com/questions/12138587
复制相似问题