Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
一个Python正则表达式,用于查找反斜杠在C++;包括语句,除非它们是';我们在一起 我正在编写一个Python脚本来识别清理C++代码的地方。我很难找到一个正则表达式来检测include语句中反斜杠的使用情况,但是忽略在恰好使用反斜杠的字符串中使用反斜杠_Python_Regex - Fatal编程技术网

一个Python正则表达式,用于查找反斜杠在C++;包括语句,除非它们是';我们在一起 我正在编写一个Python脚本来识别清理C++代码的地方。我很难找到一个正则表达式来检测include语句中反斜杠的使用情况,但是忽略在恰好使用反斜杠的字符串中使用反斜杠

一个Python正则表达式,用于查找反斜杠在C++;包括语句,除非它们是';我们在一起 我正在编写一个Python脚本来识别清理C++代码的地方。我很难找到一个正则表达式来检测include语句中反斜杠的使用情况,但是忽略在恰好使用反斜杠的字符串中使用反斜杠,python,regex,Python,Regex,每一行都以一个六位数开始,这是原始文件中的行号。下面是一个示例,其中我遇到的问题是字符串中的\n、\t和\“导致匹配为假阳性: 000001#include "should\be\no\backslashes" 000002 QString code = 000003 "#include <QPushButton>\n#include \"some/thing\"\n{\n\tauto button = new QPushButton(parent);\n\tButton

每一行都以一个六位数开始,这是原始文件中的行号。下面是一个示例,其中我遇到的问题是字符串中的
\n、\t和\“
导致匹配为假阳性:

000001#include "should\be\no\backslashes"
000002    QString code =
000003    "#include <QPushButton>\n#include \"some/thing\"\n{\n\tauto button = new QPushButton(parent);\n\tButtonStyle::ApplyButtonStyling(*button);\n}\n";
000001#包括“应该\应该\没有\反斜杠”
000002 QString代码=
000003“#包含\n#包含\“某些/事物\”\n{\n\tauto button=new QPushButton(父项);\n\tButtonStyle::ApplyButtonStyling(*button);\n}\n”;
正则表达式应该使用组来匹配行号和匹配的文本


什么样的正则表达式可以匹配第一行的
include
,但可以防止包含
include
和反斜杠转义序列的字符串出现误报?

为什么不能只在正则表达式中包含
\include
,而只在include语句中搜索反斜杠

如果以下正则表达式后跟一个
#include
(与数字之间只有空格)和字符串中其他位置至少一个反斜杠,则它与字符串开头的6位数字匹配。它与第三个字符串不匹配,因为
数字和
#include
之间会破坏模式

r'^(\d{6})\s*(?=#include.*\\)'
此示例返回所需的结果:

import re
strings = [r'000001#include "should\benobackslashes"', r'000002    QString code =', r'000003    "#include <QPushButton>\n#include \"some/thing\"\n{\n\tauto button = new QPushButton(parent);\n\tButtonStyle::ApplyButtonStyling(*button);\n}\n";']

for string in strings:
    m = re.search(r'(\d{6})(?=#include.*\\)', string)
    try:
        print(m.group(0))
    except:
        pass

虽然您的问题可能比这更复杂,但基于您的问题,我认为基于此的简单方法应该可行。

以下是对我有效的方法:

regex = r'^(?P<line_num>\d{6})(?P<line>.*#include\s+(\".*\\.*\"|<.*\\.*>).*$)'
regex=r'^(?P\d{6})(?P.#include\s+(\“*\\.\”).$)

<代码> >我并没有试图创建一个和C++解析器一样复杂的东西。我只想找到C++中的风格问题,可以用正则表达式找到,也就是说,我正在尝试创建一个相对简单的LIT。你可以匹配,然后通过CalbButter删除后面的代码< >代码(m)^(\d{ 6 })([^ \r\n**)(\**)* /代码>这可能会导致跨越行的字符串出现问题。但是,您可以同时匹配字符串和include,这样就不会有问题了。例如“\start\\end string\”但是,您可以用这个
(?m)^(\d{6})([^\S\r\n]*)(\\\\.*)(?=\r?\n | \Z)(?另外,
启动的指令比包含的指令更多。比如定义、pragma、if、else、endif等等。但是,我认为includes不能跨行(虽然不确定)。如果你能展示你所做的尝试,而不是期待有人向你展示如何做到这一点,这会有所帮助。
regex = r'^(?P<line_num>\d{6})(?P<line>.*#include\s+(\".*\\.*\"|<.*\\.*>).*$)'