我正在使用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 ++(或其他编辑器,如果有必要)中快速找到它们,以便我可以修复它们。
答案 0 :(得分:1)
您可以使用以下正则表达式:
<<[^\\>]*\\[^>]*>>
说明:
<<
自定义标记语言的开头标记[^\\>]*
任意数量的字符不是\
或>
\\
文字\
[^\\>]*
任意数量的不是>
>>
自定义标记语言的结束标记 编辑:即使>
字符可以在自定义标记标记内,也可以使用以下表达式,它依赖于原子组/占有量词来防止灾难性的回溯并保持比赛快速:
<<(?>(?>[^\\>]*)(?>>(?!>))?)*+\\(?>(?>[^>]*)(?>>(?!>))?)++>>
它与前面的表达类似,但包括:
(?>...)
原子团(?>>(?!>))?
可选地匹配>
,如果没有紧跟其他>
*+
任意次数+占有量词++
至少一次+占有量词