在最里面的大括号中查找带有给定子字符串的单词开头的文本

时间:2019-02-03 14:50:27

标签: regex python-3.x

请考虑以下文本:

{\Largefont\it Hello world!} Some text. {   \Hugefont \sl Thanks.}

我正在尝试编写一个正则表达式,该表达式将:

  1. 在全文中标识最里面的花括号,并且
  2. 检查所标识的文本块中的第一个单词是否以“ \”开头并在其中包含子字符串“ font”。

正则表达式

re.compile(r'\{\s*[^{}]+\}')

完成工作的第一部分。我如何完成第二部分?特别是,我不想将\Largefont\it视为一个单词,而希望将其视为两个单独的单词\Largefont\it。预期的输出是:

{\Largefont\it Hello world!}
{   \Hugefont \sl Thanks.}

谢谢。

2 个答案:

答案 0 :(得分:1)

您需要使用正面的眼光,以确保传入的数据遵循该模式。这是您可以使用的正则表达式,

(?<=\{)(?=\s*\\[^{}\\]*font)[^{}]+(?=\})

Demo

说明:

  • (?<=\{)-积极向后看,以确保文本前面带有{字符
  • (?=\s*\\[^{}\\]*font)-积极向前看,以确保大括号内的内容以可选的空白开头,然后是\,然后第一个单词的第一个单词包含font,其后是除{{1之外的其他可选字符}}或{
  • }-实际捕获了预期的文本
  • [^{}]+-积极向前看,以确保捕获的内容包含在大括号内

答案 1 :(得分:1)

尝试此正则表达式:

(?<={)\s*\\[^\\]*font[^{}]*(?=})

Click for Demo

说明:

  • (?<={)-向后看以确保当前位置之前紧跟着{
  • \s*\\-匹配0+空格,后跟\
  • [^\\]*font-匹配0+次出现的不是\的任何字符,后跟子字符串font
  • [^{}]*-匹配0+次出现的既不是{也不是}的字符。 此子部分确保您获取最里面的大括号中的内容
  • (?=})-前瞻,以确保当前位置紧跟着}