gpt4 book ai didi

python - 如何使用 python 正则表达式查找文件中的所有字符字符串

转载 作者:行者123 更新时间:2023-12-01 09:31:48 25 4
gpt4 key购买 nike

我有一个包含两种类型字符串的 .CPP 文件

CHAR 字符串的特点是它们仅出现在引号内。

WCHAR 字符串的特点是它们出现在引号中,前面有字母 L

字符串 CHAR 示例:“字符串”

字符串 WCHAR 示例:L“wchar字符串”

我想查找文件中的所有 CHAR(并且仅查找它们),然后查找文件中的所有 WCHAR(并且仅查找它们)

这是我目前拥有的代码。他知道如何找到引号之间的字符串:

import re
#find all strings between ""
re.findall('"([^"]*)"', f.read())

#find all strings between L""
re.findall('L"([^"]*)"', f.read())

我如何告诉他只给我带引号之间的字符串,只要第一个字母之前没有字母L

这是一个示例文件:

#include <stdio.h>


int main()
{
printf(L"very long first wchar\
cuple of line\
string");

printf("regular char string");

printf(L" wchar short string in bracket");

printf("short string in bracket");

printf("very long\
cuple of line\
string");


printf(L"very long wchar\
cuple of line\
string");
}

最佳答案

您可以使用

r'(?s)(?<!\\)(?:\\\\)*(L)?"([^"\\]*(?:\\.[^"\\]*)*)"'

如果组 1 为 None,则将匹配项附加到 CHAR 类型字符串,否则匹配的字符串为 WCHAR 类型,您可以获取组 2 的值。

详细信息

  • (?s) - DOTALL 修饰符让 .匹配任意字符
  • (?<!\\) - 前面没有 \ 的位置
  • (?:\\\\)* - 零个或多个连续的双反斜杠(以避免在文字反斜杠后匹配转义引号)
  • (L)? - 第 1 组:可选 L
  • " - 双引号
  • ([^"\\]*(?:\\.[^"\\]*)*) - 第 2 组:
    • [^"\\]* - 除反斜杠和 " 之外的任何 0+ 个字符
    • (?:\\.[^"\\]*)* - 0+ 连续出现
      • \\. - 任何用反斜杠转义的字符
      • [^"\\]* - 除反斜杠和 " 之外的任何 0+ 个字符
  • " - 结束双引号。

请参阅regex demoPython demo :

import re
rx = r'''(?s)(?<!\\)(?:\\\\)*(L)?"([^"\\]*(?:\\.[^"\\]*)*)"'''
s = ("#include <stdio.h>\n\n\n"
"int main()\n"
"{ \n"
" printf(\"regular char string\");\n\n"
" printf(L\" wchar short string in bracket\");\n\n"
" printf(\"short string in bracket\");\n\n"
" printf(\"very long\\\n"
" cuple of line\\\n"
" string\");\n\n\n"
" printf(L\"very long wchar\\\n"
" cuple of line\\\n"
" string\");\n"
"}")
chars_list = []
wchars_list = []
for m in re.finditer(rx, s):
if m.group(1):
wchars_list.append(m.group(2))
print("WCHAR: {}".format(m.group(2)))
else:
chars_list.append(m.group(2))
print("CHAR: {}".format(m.group(2)))

输出:

CHAR: regular char string
WCHAR: wchar short string in bracket
CHAR: short string in bracket
CHAR: very long\
cuple of line\
string
WCHAR: very long wchar\
cuple of line\
string

关于python - 如何使用 python 正则表达式查找文件中的所有字符字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49897375/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com