【问题标题】:Regex to get text within text and ignore text with the format <xxx>正则表达式获取文本中的文本并忽略格式为 <xxx> 的文本
【发布时间】:2019-04-03 22:06:34
【问题描述】:

假设我有以下文字:这是一个文字

如果我只想得到“这是一个文本”,那么正则表达式将是:

(?<=\<tag\>).*(?=\<\/tag\>)

现在想象一下,文本是这样的:

<tag> <Arial>This is a text<Arial></tag>

现在得到“这是一个文本”并忽略其他所有内容的正则表达式会是什么? Arial这个词可能不是固定的,而是变化的。

提前致谢。

【问题讨论】:

  • 类似(?&lt;=&gt;)(?!\s+&lt;)[^&lt;&gt;]*(?=&lt;),但在现实生活中,您更愿意使用 HTML/XML 解析器。
  • 谢谢,但在那个表达中我需要某种方式来识别

标签: regex tags


【解决方案1】:

这取决于正则表达式的风格。如果您的正则表达式允许backreferences,您可以使用:

\<(\w+)\>([^<>]*)\<\/\1\>

\1会引用(\w+)的内容。

在这种情况下,文本“This is a text”将与组 2 匹配(请参阅demo)。

请注意,在大多数情况下,您不能在 lookbekind 中使用 +

否则,您必须更广泛并使用以下内容:

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

无论如何,最好的解决方案可能是使用 DOM 解析器。

【讨论】:

  • 感谢您的回答,但我确实必须检测到最外面的 ,并忽略内部标签
  • 如果你想强制标签 "" 的存在,只需将上面的正则表达式与环视(类似this)包装起来
  • 在您的示例中不匹配。而且那个例子看起来真的非常复杂:(我真的需要强制“”的存在......
  • 我更新了。这很复杂,因为这不是正则表达式的工作。
猜你喜欢
  • 2011-06-22
  • 1970-01-01
  • 2020-10-23
  • 2011-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多