OD E卷 - 实现【正则表达式替换】
题目
- 输入一个字符串,对其中的下划线做统一替换;
- 将其中的每个下划线“_”,使用特殊字符串“(^|$|[,+])”替换,并输出替换后的结果;
- 如下场景不做替换:
- 在一堆方括号之内的下划线不替换,方括号成对出现,且可以嵌套;
- 转义的下划线“_” 不替换;
实例1:
输入:
“^(_9494)”
输出:
“^((^|$|[,+])9494)”
解题代码
方案1:
s = input().strip()
result = ""
part = "(^|$|[,+])"
stack = []
for idx, char in enumerate(s):
if idx == 0 and char == "_":
# 直接替换
result += part
elif char == "_":
if s[idx -1] == "\\": # 不替换
result += char
elif stack: # 不替换
result += char
else:
result += part
elif char == "[":
stack.append(char)
result += char
elif char == "]":
stack.pop()
result += char
else:
result += char
print(result)
方案2:
input_str = input()
count = 0
result = ""
for i in range(len(input_str)):
if (input_str[i] == '[') :
count+=1
elif (input_str[i] == ']') :
count-=1
#使用count来判断是否在方括号内部
if (count == 0) :
if (input_str[i] == '_' and (i == 0 or input_str[i - 1] != '\\')) :
result += "(^|$|[,+])"
else:
result += input_str[i]
else:
result += input_str[i]
print(result)