正则表达式:跳过/忽略模式

时间:2010-04-22 23:11:20

标签: regex

鉴于文本中嵌入了以下字符串,如何提取整行但不匹配内部“<”和“>”?

<test type="yippie<innertext>" />

修改
更具体一点,我们需要处理“类型”具有或没有“&lt;”的两种用例。和“&gt;”字符。

<h:test type="yippie<innertext>" />
<h:test type="yippie">

Group 1: 'h:test'
Group 2: ' type="yippie<innertext>" '  -or-  ' type="yippie"'   (ie, remaining content before ">" or "/>")

到目前为止,我有类似的东西,但是第2组在第一个“&gt;”停止的情况有点偏差。调整第2组的第一部分条件。

(<([a-zA-Z0-9_:-]+)([^>"]*|[^>]*?)\s*(/)?>)

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

试试这个:

<([:\w]+)(\s(?:"[^"]*"|[^/>"])+)/?>

示例用法(Python):

>>> x = '<h:test type="yippie<innertext>" />'
>>> re.search('<([:\w]+)(\s(?:"[^"]*"|[^/>"])+)/?>', x).groups()
('h:test', ' type="yippie<innertext>" ')

另请注意,如果您的文档是HTML或XML,则应使用HTML或XML解析器,而不是尝试使用正则表达式执行此操作。

答案 1 :(得分:0)

看起来您正在尝试使用正则表达式解析XML / HTML。我会说你的做法从根本上说是错误的。足够先进的正则表达式与XML解析器无法区分。毕竟,如果你需要解析怎么办?

<test type="yippie<inner\"text\"_with_quotes,_literal_slash_and_quote\\\">" />

此外,您可能需要将内部<>转义为&lt;&gt;

为了进一步解释为什么你不应该用正则表达式解析XML,我只能屈服于这个优秀的答案:

RegEx match open tags except XHTML self-contained tags