在<<之间查找字符串和>>包含反斜杠的

时间:2016-08-08 12:18:03

标签: regex rtf backslash

我正在使用RTF文件,我必须在自定义标记语言中插入标记,程序将替换为数据。例如,在文件中,我有:

Account number:  <<@Account.AccountNumber>>

我正在Microsoft Word 2007中编辑此模板,每当我退格时,Microsoft Word会在模板中插入一堆RTF垃圾,所以我得到这样的内容:

<<@Am\hich\af1\dbch\af31505\loch\f1 ount>>

而不是:

<<@Amount>>

如何在这里发现?我尝试编写正则表达式来做到这一点,但我不知道如何写得很好。这是我试过的一个:

<<.+?\\.+?>>

但是当我传入这句话时:

<<Where: Phrase =\ @Value>>\<<hi>>\hi<<hi>> 

“=”之后的反斜杠应匹配,但“&lt;&lt;&lt;&gt;&gt;”之间的反斜杠都不匹配和“&lt;&lt;&gt;&gt;”标签也不是“&lt;&lt;&gt;&gt;”之间的“\ hi”标签应该匹配(regex101.com和Notepad ++匹配)。

我不在乎只有反斜杠本身是匹配的还是整个标签都带有反斜杠。我的最终目标是能够在Notepad ++(或其他编辑器,如果有必要)中快速找到它们,以便我可以修复它们。

1 个答案:

答案 0 :(得分:1)

您可以使用以下正则表达式:

<<[^\\>]*\\[^>]*>>

Demo

说明:

  • <<自定义标记语言的开头标记
  • [^\\>]*任意数量的字符不是\>
  • \\文字\
  • [^\\>]*任意数量的不是>
  • 的字符
  • >>自定义标记语言的结束标记

编辑:即使>字符可以在自定义标记标记内,也可以使用以下表达式,它依赖于原子组/占有量词来防止灾难性的回溯并保持比赛快速:

<<(?>(?>[^\\>]*)(?>>(?!>))?)*+\\(?>(?>[^>]*)(?>>(?!>))?)++>>

它与前面的表达类似,但包括:

  • (?>...)原子团
  • (?>>(?!>))?可选地匹配>,如果没有紧跟其他>
  • *+任意次数+占有量词
  • ++至少一次+占有量词

Demo