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
)。