请考虑以下文本:
{\Largefont\it Hello world!} Some text. { \Hugefont \sl Thanks.}
我正在尝试编写一个正则表达式,该表达式将:
正则表达式
re.compile(r'\{\s*[^{}]+\}')
完成工作的第一部分。我如何完成第二部分?特别是,我不想将\Largefont\it
视为一个单词,而希望将其视为两个单独的单词\Largefont
和\it
。预期的输出是:
{\Largefont\it Hello world!}
{ \Hugefont \sl Thanks.}
谢谢。
答案 0 :(得分:1)
您需要使用正面的眼光,以确保传入的数据遵循该模式。这是您可以使用的正则表达式,
(?<=\{)(?=\s*\\[^{}\\]*font)[^{}]+(?=\})
说明:
(?<=\{)
-积极向后看,以确保文本前面带有{
字符(?=\s*\\[^{}\\]*font)
-积极向前看,以确保大括号内的内容以可选的空白开头,然后是\
,然后第一个单词的第一个单词包含font
,其后是除{{1之外的其他可选字符}}或{
}
-实际捕获了预期的文本[^{}]+
-积极向前看,以确保捕获的内容包含在大括号内答案 1 :(得分:1)
尝试此正则表达式:
(?<={)\s*\\[^\\]*font[^{}]*(?=})
说明:
(?<={)
-向后看以确保当前位置之前紧跟着{
\s*\\
-匹配0+空格,后跟\
[^\\]*font
-匹配0+次出现的不是\
的任何字符,后跟子字符串font
[^{}]*
-匹配0+次出现的既不是{
也不是}
的字符。 此子部分确保您获取最里面的大括号中的内容 (?=})
-前瞻,以确保当前位置紧跟着}