【问题标题】:Regex for matching mandatory and optional characters in random order用于以随机顺序匹配强制和可选字符的正则表达式
【发布时间】:2018-09-11 06:46:55
【问题描述】:

我需要一个正则表达式来通过 Visual Studion 搜索引擎(可能通过 C#)在 HTML 元素之间查找文本。

在某种程度上可以正常工作的是:

>\s*([\w])+\s*<

但它必须匹配以下所有“asdf”:

<element>asdf
  <element>asdf.</element>asdf
  <element />
asdf asdf
</element>
<element>
  asdf!
</element>

它不应该找到两个标签之间的空格,这个例子应该匹配NOTHING:

<element>

  <element>  </element>
</element>

我特别需要的是一个匹配的正则表达式:

  • 从 >
  • 开始
  • 以 结尾
  • 在这些之间至少有一个单词字符 (\w) 是强制性的
  • 一堆特殊字符是必需的(_ . ? , !SPACE)是可选的
  • 在开始/结束和内容之间可能存在不可预知的空白长度(意味着它的长度也可以为零)
  • 开始和结束之间的字符顺序是绝对随机的

我不想得到包含不带 \w 的特殊字符的匹配项。

另一个根本不起作用的是:

>\s*((?=[\w]+)(?=[ ?=()!"_]*))\s*<

满足我需求的正确方法是什么?

非常感谢!

【问题讨论】:

  • 我提供的输入包含一个 .和一个!。我认为这将表明我对这些“特殊字符”的目的。不,我的意思是它们确实是允许的,但只有当强制字符也出现在这个区域时,表达式才匹配。
  • 对不起,我把特殊字符描述为必填项是错误的 - iment OPTIONAL(已更改)

标签: regex random


【解决方案1】:

您可以在匹配&gt;&lt;s 之间的文本之前使用一次前瞻:

>(?=[^<]*\w).*?<

(使用“s”标志,所以点匹配换行符 - 或者,使用类似 [\S\s]*? 的东西而不是 .*?

前瞻确保&gt;&lt; 之间有一个单词字符。然后,匹配并延迟重复任何字符,直到找到 &lt;

https://regex101.com/r/cqinyh/2

【讨论】:

  • 非常感谢您的帮助。而且,好吧,坦克...向我展示了我在处理正则表达式方面的了解有多么少;)祝您有美好的一天
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多