首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >匹配特定文本的c#正则表达式

匹配特定文本的c#正则表达式
EN

Stack Overflow用户
提问于 2012-01-05 02:04:27
回答 5查看 833关注 0票数 1

我希望匹配foo:12345格式的所有文本,这些文本不包含在HTML锚中。例如,我希望匹配以下代码中的第1行和第3行:

foo:123456

<a href="http://www.google.com">foo:123456</a>

foo:123456

我已经尝试了这些正则表达式,但没有成功:

负向先行尝试(不正确匹配,但不包括最后一位)

foo:(\d+)(?!</a>)

使用非捕获分组的负面先行

(?:foo:(\d+))(?!</a>)

负向回看尝试(通配符似乎不受支持)

(?<!<a[^>]>)foo:(\d+)

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-01-05 02:09:02

正则表达式通常不是最适合这项工作的工具,但如果您的情况非常具体,如示例中所示,您可以使用:

代码语言:javascript
复制
foo:((?>\d+))(?!</a>)

您的第一个表达式不起作用,因为在(?!</a>)匹配之前,\d+会回溯。这可以通过不允许\d+回溯来修复,就像上面在原子/非回溯组的帮助下一样,或者您也可以在\d+回溯的情况下使前视失败,例如:

代码语言:javascript
复制
foo:((?>\d+))(?!</a>|\d)

尽管这并不是那么有效。

票数 0
EN

Stack Overflow用户

发布于 2012-01-05 02:11:46

如果您想像这样开始分析HTML,那么您可能希望实际解析HTML,而不是使用正则表达式。HTML Agility Pack通常是第一个停靠的端口。使用正则表达式,很难处理像<a></a>foo:123456<a></a>这样的东西,它当然应该去掉中间的部分,但编写一个能做到这一点的正则表达式是极其困难的。

我应该补充的是,我假设您确实有一块HTML,而不仅仅是像上面的每一行这样的单独的短字符串。我排除了它的部分原因是,如果它是唯一的东西,那么匹配它是相当容易的,所以我想如果你想要它,你就会得到它。:)

票数 3
EN

Stack Overflow用户

发布于 2012-01-05 02:09:57

请注意,对于不同的字符串长度,lookbehind将不起作用,您可能会以不同的方式解决它

例如

  1. 查找并标记锚点中包含的所有foo-
  2. 查找并使用所有其他
  3. Remove标记

实现您的目标

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

https://stackoverflow.com/questions/8731662

复制
相关文章

相似问题

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