在正则表达式中使用变量遇到问题的技术求助
解决正则表达式中使用变量实现自定义strip函数的问题
我明白你现在卡在怎么把变量融入正则表达式来实现自定义strip函数上了,咱们一步一步来搞定它!
首先看你代码里的问题:what_to_strip = re.compile(r + re.escape(thing2))这一行有明显问题——这里的r不是字符串前缀,直接写会报错,而且你还没把实际要处理的what_to_strip变量用起来,反而用了一个硬编码的thing2 = 'L',这肯定不是你想要的效果对吧?
正确的实现思路
Python原生的strip()函数是移除字符串开头和结尾的指定字符(默认是空白字符),用正则实现的话,需要覆盖两种核心场景:
- 如果用户没传入
what_to_strip或者传入空值,就默认匹配空白字符(空格、制表符、换行等); - 如果传入了指定字符,必须先用
re.escape()转义特殊字符(比如*、.、?这些在正则里有特殊含义的字符),避免正则语法出错; - 最后用正则匹配字符串开头和结尾的目标字符,替换成空字符串即可。
修正后的完整代码
import re # 接收用户输入 print('Enter 1st Argument: value to strip.') user_input = input() print('Enter 2nd Argument: The value to strip off the 1st value (leave blank for whitespace).') strip_value = input() # 实现自定义strip函数 def regex_strip(value, what_to_strip=None): # 处理默认情况:未指定移除字符时匹配空白 if what_to_strip is None or what_to_strip == '': pattern = re.compile(r'^\s+|\s+$') else: # 转义用户输入中的正则特殊字符,避免语法错误 escaped_chars = re.escape(what_to_strip) # 用原始字符串拼接正则模式:匹配开头/结尾的指定字符(一次或多次) pattern = re.compile(rf'^[{escaped_chars}]+|[{escaped_chars}]+$') # 替换匹配到的内容为空字符串,返回处理结果 return pattern.sub('', value) # 执行并输出结果 result = regex_strip(user_input, strip_value) print(f"处理后的结果: '{result}'")
关键代码解释
re.escape(what_to_strip):把用户输入里的正则特殊符号转义成普通字符,比如用户输入.,转义后会变成\.,确保正则能精准匹配用户指定的内容;rf'^[{escaped_chars}]+|[{escaped_chars}]+$':正则模式分两部分,^[{escaped_chars}]+匹配字符串开头的指定字符(一次或多次),[{escaped_chars}]+$匹配字符串结尾的指定字符(一次或多次),|表示逻辑“或”;pattern.sub('', value):将匹配到的开头/结尾目标字符替换为空,完美复刻strip()的核心功能。
测试示例
比如你输入第一个值是###Hello World###,第二个值是#,处理后会得到Hello World;如果第二个值留空,输入 Hello World ,处理后会得到Hello World。
内容的提问来源于stack exchange,提问作者Chicken Sandwich No Pickles
相关产品推荐
相关产品推荐

