在Python中使用正则表达式匹配C ++字符串和字符串文字

时间:2016-04-13 11:46:17

标签: python regex

我想在 C ++源文件中匹配字符串双引号和单引号之间)和字符串文字 < / strong>即可。我在Python中使用re库。

我已经达到了可以将双引号与r'"(.*?)"'匹配的程度,但是在扩展上述正则表达式的语法方面也遇到问题也与单引号字符串匹配(与\混淆以及如何在Python正则表达式中转义引号。

此外,从here开始,我希望能够匹配以下每种情况:

  •   

    &#34; (unescaped_character | escaped_character)*&#34;

  •   

    L&#34; (unescaped_character | escaped_character)*&#34;

  •   你好&#34; (unescaped_character | escaped_character)*&#34;

  •   你好&#34; (unescaped_character | escaped_character)*&#34;

  •   

    U&#34; (unescaped_character | escaped_character)*&#34;

  •   

    前缀(可选)R&#34;分隔符(raw_characters)分隔符&#34;

我对正则表达式很困惑,所有我尝试失败。任何建议和示例代码对我来说都很棒,以获得理解并且 - 构建所有这些正则表达式。

1 个答案:

答案 0 :(得分:2)

您可以使用以下正则表达式获取所有字符串文字:

r'(?P<prefix>(?:\bu8|\b[LuU])?)(?:"(?P<dbl>[^"\\]*(?:\\.[^"\\]*)*)"|\'(?P<sngl>[^\'\\]*(?:\\.[^\'\\]*)*)\')|R"([^"(]*)\((?P<raw>.*?)\)\4"'

请参阅regex demo

<强>解释

  • (?P<prefix>(?:\bu8|\b[LuU])?) - (组名为&#34;前缀&#34;)可选前缀,u8(整个字)或Lu,{{ 1}}(整个单词)
  • U - 双引号字符串文字,其中(?:"(?P<dbl>[^"\\]*(?:\\.[^"\\\\]*)*)"之间的内容被捕获到名为&#34; dbl&#34;的组中。该部分匹配",然后是"\以外的0 +字符,后跟任意数量(0+)的转义序列(")序列,后跟除\\.\以外的0 +个字符(它是"的展开版本)
  • (?:[^"\\]|\\.)* - 或
  • | - 单引号字符串文字,其中\'(?P<sngl>[^\'\\]*(?:\\.[^\'\\]*)*)\')之间的内容被捕获到名为&#34; sngl&#34;的组中。详细了解它的工作原理。
  • ' - 或
  • | - 这是一个原始字符串文字部分,将内容捕获到名为R"([^"(]*)\((?P<raw>.*?)\)\4"的组中。首先,匹配raw。然后R跟随除""以外的0+个字符,同时将分隔符值捕获到第4组(因为所有命名的组也都有其数字ID),然后内部的内容是与惰性构造匹配(如果字符串是多行,则使用(),直到第一个re.S,然后是第4组的内容(原始字符串文字分隔符),然后是最终{{1 }}。

示例Python demo

)