Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.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 如何找到不在注释中的方法名?_Python_Regex - Fatal编程技术网

Python 如何找到不在注释中的方法名?

Python 如何找到不在注释中的方法名?,python,regex,Python,Regex,我问了,但我没有正确地表达自己。如果我有这三个案例: void aMethod(params ...) //void aMethod(params // void aMethod(params ^ can have any number of spaces here 如果在注释中找不到字符串,我如何调整正则表达式使其匹配?这是我的正则表达式: re.search("(?<!\/\/)\s*void aMethod",buffer) re.search((?这应该可以为您的示例做一些

我问了,但我没有正确地表达自己。如果我有这三个案例:

void aMethod(params ...)
//void aMethod(params
// void aMethod(params
  ^ can have any number of spaces here
如果在注释中找不到字符串,我如何调整正则表达式使其匹配?这是我的正则表达式:

re.search("(?<!\/\/)\s*void aMethod",buffer)

re.search((?这应该可以为您的示例做一些工作:

re.search("^(?!\/\/)\s*void aMethod",line)

这应该为您的示例做一些准备:

re.search("^(?!\/\/)\s*void aMethod",line)

是否有使用正则表达式的特殊需要?如果没有,您也可以尝试使用以下内容:

a = """void aMethod(params ...)
//void aMethod(params
// void aMethod(params
  ^ can have any number of spaces here"""

for line in a.split('\n'):
    if not line.strip().startswith("//") and "void aMethod(params" in line:
        print line

根据lazyr comment编辑是否有使用正则表达式的特殊需要?如果没有,您也可以尝试使用以下内容:

a = """void aMethod(params ...)
//void aMethod(params
// void aMethod(params
  ^ can have any number of spaces here"""

for line in a.split('\n'):
    if not line.strip().startswith("//") and "void aMethod(params" in line:
        print line


根据lazyr comment编辑如果你想忽略评论,我建议先“预处理”你的文件以忽略/删除评论。请参阅:

如果你想忽略评论,我建议先“预处理”你的文件以忽略/删除评论。请参阅:

这是仅有的三种情况吗?
/*foo void aMethod(参数)栏*/
(多行注释)和
“foo void aMethod(参数)栏”
(字符串文字)Python没有标记器吗?@Bart,多行将不会出现。@Geo和可能包含类似于方法调用的文本的字符串文字?请告诉我们有关您的问题的更多信息。有一个很好的机会,用regexps.BTW解决这个问题是疯狂的。这是仅有的三种情况吗?关于:
/*foo void aMethod(params)bar*/
(多行注释)和
“foo void aMethod(params)bar”
(字符串文字)Python没有标记器吗?@Bart,多行将不会出现。@Geo和可能包含类似于方法调用的文本的字符串文字?请告诉我们更多关于您的问题。有一个很好的机会,用regexps.BTW解决这个问题是疯狂的。我只是好奇,是否可能有一个反向查找解决方案?@Geo,不,因为look behind必须有一个固定的宽度。所以你不能把
\s*
\s+
放在一个look-behind中。是的,我知道固定的宽度。但是不能用a+重复后面的外观,比如look-behind来寻找空间吗?你可能也应该在其他地方允许额外的空格。搜索行的开头,然后立即否定ive lookahead与使用match相同,只是在regexp:
re.match(“\s*void\s+aMethod\s*\(\s*params”)中不包含
/
。我只是好奇,是否可能有一个消极的后视解决方案?@Geo,不,因为后视必须有一个固定的宽度。所以你不能将
\s*
\s+
放在后视中。是的,我知道固定的宽度。但是后视不能用a+重复,比如后视寻找空间吗?你也许应该允许f也可以在其他地方使用额外的空格。搜索行的开头,然后立即使用负向前看与使用match相同,只是不在regexp:
re.match(“\s*void\s+aMethod\s*”(\s*params”)
中包含
void-aMethod>。这将排除
void-aMethod(params/
,应该包括在内,并且包括
var=“asdf-aMethod-asdf”
,应该排除。如果不是line.strip(),则执行
。改为使用(“/”)和
行中的“void-aMethod(params)”。请记住,只有在没有多余空格的情况下才有效,例如:
void-aMethod(params
。这将排除应包括的
void-aMethod(params/
),并包括应排除的
var=“asdf-aMethod-asdf”
。如果不是line.strip().startswith(“/”)和“void-aMethod(params)”,则执行
请记住,只有在没有多余空格的情况下,这才有效,例如:
void-aMethod(params
)。