正则表达式匹配单词之间,如果没有结束单词

时间:2016-06-21 10:26:24

标签: regex

我想在以下字符串中匹配特定部分(粗体):

  • \ doc doc1,doc2
  • \ doc doc1,doc2 \ in filed1,field2
  • \ DOC doc1,doc2 \ in filed1,field2 \ doc doc3,doc4 \ in field3,field4

我出来了这个正则表达式/\\doc(.*?)\\in/g https://regex101.com/r/dV7mF4/1

但它与第一​​个字符串 doc1,doc2 不匹配。我需要添加到我的正则表达式以匹配上面的所有这些字符串?

2 个答案:

答案 0 :(得分:1)

您可以在正向前瞻中使用替换来设置上下文:

\\doc(.*?)(?=$|\\in)
          ^^^^^^^^^^

请参阅regex demo

(?=$|\\in)将允许.*?匹配字符串的结尾($分支)或第一个\in(第二个分支)。< / p>

作为替代方案,您可以在\in之后指定除\doc之外的任何内容:

\\doc([^\\]*(?:\\(?!in)[^\\]*)*)

请参阅this regex demo

此处[^\\]*(?:\\(?!in)[^\\]*)*匹配除\以外的零个或多个字符,然后0 {+ 1}}的序列未跟\后跟{0}以外的字符{ {1}}。基本上,任何不是in的文本。

答案 1 :(得分:1)

将您的正则表达式更改为:import lxml.etree as et x = et.parse("test.xml", parser=et.HTMLParser(remove_comments=True)) print(et.tostring(x))

Demo and Explaination

相关问题