技术问询:仅在最后一个注释处拆分,跳过变量内的#符号
解决脚本行按最后一个注释拆分的问题
我来帮你搞定这个脚本行拆分的需求——要实现仅在最后一个独立的# comment注释处拆分,同时跳过变量(比如字符串里)的#符号,并且把不带注释的行归入第一个数组对吧?
核心思路
我们需要用正则表达式精准匹配不在引号包裹内容内的最后一个注释行,这样就能避免误匹配变量里的#。这里的关键是先排除引号内的内容,再定位最后一个独立注释。
正则表达式实现
用这个正则来匹配拆分点:
(?<!["'])(#.*)$(?!.*(?<!["'])#.*)
解释下各个部分:
(?<!["']):负向后断言,确保#前面没有单引号或双引号,排除变量里的#(#.*)$:匹配从#开始到行尾的注释内容(?!.*(?<!["'])#.*):负向前断言,确保这一行之后没有其他不在引号内的#注释,也就是定位最后一个注释行
示例代码(以Python为例)
假设我们有一段脚本内容:
var1 = "This is a string with # inside" var2 = 'Another string # here' echo "Hello World" # This is a comment echo "After comment" # Final comment to split on echo "Should go to second array"
拆分代码可以这么写:
import re script_content = """var1 = "This is a string with # inside" var2 = 'Another string # here' echo "Hello World" # This is a comment echo "After comment" # Final comment to split on echo "Should go to second array" """ # 找到最后一个符合条件的注释位置 match = re.search(r'(?<!["'])(#.*)$(?!.*(?<!["'])#.*)', script_content, re.MULTILINE) if match: split_pos = match.start() first_array = script_content[:split_pos].strip().split('\n') second_array = script_content[split_pos:].strip().split('\n') else: # 如果没有符合条件的注释,所有行都进第一个数组 first_array = script_content.strip().split('\n') second_array = [] print("第一个数组(最后注释前的内容):") for line in first_array: print(f"- {line}") print("\n第二个数组(最后注释及之后的内容):") for line in second_array: print(f"- {line}")
效果说明
- 变量里的
#(比如"This is a string with # inside")会被完全忽略,不会触发拆分 - 只有最后一个独立的
#注释行才会作为拆分点 - 所有在这个拆分点之前的行(包括中间的注释行)都会归入第一个数组,拆分点及之后的内容归入第二个数组
内容的提问来源于stack exchange,提问作者Marin Sagovac
相关产品推荐
相关产品推荐

