考虑以下文本:
{\Largefont\it Hello world!} Some text. { \Hugefont \sl Thanks.}
我正在尝试编写一个正则表达式,它将:
- 识别全文中最里面的大括号,并且
- 检查已识别文本 block 中的第一个单词是否以“\”开头并且其中包含子字符串“font”。
正则表达式
re.compile(r'\{\s*[^{}]+\}')
完成工作的第一部分。我如何完成第二部分?特别是,我不希望将 \Largefont\it
视为单个单词,而是将其视为两个单独的单词 \Largefont
和 \it
。预期输出为:
{\Largefont\it Hello world!}
{ \Hugefont \sl Thanks.}
谢谢。
最佳答案
您需要进行积极的预测,以确保您的传入数据遵循模式。这是您可以使用的正则表达式,
(?<=\{)(?=\s*\\[^{}\\]*font)[^{}]+(?=\})
<强> Demo
说明:
-
(?<=\{)
- 积极向后查看以确保文本前面有{
字符 -
(?=\s*\\[^{}\\]*font)
- 积极向前看,以确保大括号内的内容以可选的空格开头,然后\
那么第一个单词包含font
第一个单词后跟除{
之外的可选字符或}
-
[^{}]+
- 实际上捕获了预期的文本 -
(?=\})
- 积极前瞻,确保捕获的内容包含在右大括号内
关于regex - 查找最里面的大括号中以给定子字符串的单词开头的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54504039/