鉴于文本中嵌入了以下字符串,如何提取整行但不匹配内部“<”和“>”?
<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*(/)?>)
感谢您的帮助。
答案 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\\\">" />
此外,您可能需要将内部<
和>
转义为<
和>
为了进一步解释为什么你不应该用正则表达式解析XML,我只能屈服于这个优秀的答案: