开发编程语言时,如何检测子字符串是否处于引号中?
检测子字符串是否处于引号中的实现方案
针对你开发编程语言时需要检测子字符串是否在引号中的需求,用正则表达式确实是高效的方案,下面给出具体实现:
1. 提取所有引号内的内容
如果你需要先把代码中所有被双引号包裹的内容提取出来,可以用这个正则匹配:
import re code = """ Console.Print("Hello"); Console.Print("World"); """ # 匹配双引号内的内容,处理转义引号的情况 quote_pattern = re.compile(r'"([^"\\]|\\.)*"') matches = quote_pattern.findall(code) print(matches) # 输出: ['Hello', 'World']
正则说明:
":匹配起始双引号([^"\\]|\\.):匹配两种情况:要么是非引号、非反斜杠的普通字符,要么是转义字符(比如\")*:允许上述内容重复0次或多次":匹配闭合双引号
2. 检测特定子串是否在引号中
如果要判断某个特定子串(比如Hello)是否处于引号内,可以结合正则匹配结果来检查:
def is_substring_in_quotes(code, substring): quote_pattern = re.compile(r'"([^"\\]|\\.)*"') # 遍历所有引号内的内容,检查是否包含目标子串 for match in quote_pattern.findall(code): if substring in match: return True return False # 测试示例 print(is_substring_in_quotes(code, "Hello")) # 输出: True print(is_substring_in_quotes(code, "Print")) # 输出: False
注意事项
- 如果你的语言支持单引号,只需把正则中的
"换成',或者同时匹配两种引号(需注意引号配对问题,避免单引号和双引号交叉匹配) - 若需要处理多行字符串,记得给正则加上
re.DOTALL标志,让.匹配换行符
内容的提问来源于stack exchange,提问作者Albi
相关产品推荐
相关产品推荐

