2010-04-22 158 views
1

鉴于以下字符串嵌入在文本中,我如何提取整行,但不匹配内部“<”和“>”?正则表达式:跳过/忽略模式

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

编辑
作为更具体的,我们需要处理如下,其中“类型”有或没有“<”和“>”字符都使用情况。

<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组停在第一个“>”。调整第2组的条件的第一部分。

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

感谢您的帮助。

回答

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解析器用正则表达式来做这件事。

+0

是的,你在上面。我应该更清楚和完整。我需要将匹配的标签名称和剩余批次进行分组。往上看。 – cwall 2010-04-23 04:03:11

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

+0

我希望我能。现有的实施迫使我的手。 – cwall 2010-04-23 04:32:41