正则表达式将短语拆分为单词,但忽略标记内的空格

时间:2011-08-15 14:30:20

标签: regex

我需要将短语拆分为单词,但忽略定义标记内的文本 例如

输入

<i>111 111 111</i> 222 333 444 <i>555 666</i> 888 999 <i>000 111</i>

输出

<i>111 111 111</i>
222
333
444
<i>555 666</i>
888
999
<i>000 111</i>

2 个答案:

答案 0 :(得分:1)

试试这个:

/<i>[\d\s]*<\/i>|\d+/g

说明:

  • 对于<i>标记内的字符串,空格和数字都将包含在匹配中。
  • 不在标记内的字符串不能包含空格,因此它们将仅限于数字字符串。
  • |交流发电机正在短路,因此确保将<i>111 222 333</i>视为一个单元,拆分为111,{ {1}}和222

在此处测试Regexr,工作正常:http://regexr.com?2uf6j

答案 1 :(得分:0)

如果下面的<之后没有斜线,那么拆分空间怎么样?

>>> import re
>>> test = "<i>111 111 111</i> 222 333 444 <i>555 666</i> 888 999 <i>000 111</i>"
>>> split = re.compile(" (?![^<]*</)")
>>> split.split(test)
['<i>111 111 111</i>', '222', '333', '444', '<i>555 666</i>', '888', '999', '<i>000 111</i>']

如果标签可以嵌套,这将失败(这是正则表达式不适合此类问题的原因)。