如何使用正则表达式去除首尾指定字符(如.)并保留非首尾匹配
移除字符串首尾指定字符的正则表达式方案
嘿,这需求我熟!要实现只移除字符串首尾的指定字符(比如英文句号.),中间位置的该字符完整保留,用正则表达式很容易搞定,我给你拆解清楚:
核心正则表达式(针对英文句号)
直接用这个正则匹配首尾的句号,然后替换为空字符串就行:
^\.|\.$
正则各部分解释
^:匹配字符串的起始位置\.:匹配英文句号(因为.在正则里是通配符,所以要加反斜杠转义)|:逻辑“或”,匹配前后任意一种情况\.$:匹配字符串结束位置的句号
示例验证
拿你给出的几个测试字符串来验证,处理结果完全符合预期:
- 输入
.www.cat.com.→ 输出www.cat.com - 输入
.www.cat.com→ 输出www.cat.com - 输入
www.cat.com→ 输出www.cat.com(无首尾字符,原样保留) - 输入
www.cat.com.→ 输出www.cat.com
扩展场景:移除首尾多个相同指定字符
如果遇到首尾有多个目标字符的情况(比如 ..www.cat.com..),可以把正则改成这样,一次性移除所有首尾的连续目标字符:
^\.+|\.+$
这里的+表示匹配前面的字符(句号)1次或多次。
代码示例(常见编程语言)
JavaScript
const testStrs = [".www.cat.com.", ".www.cat.com", "www.cat.com", "www.cat.com."]; testStrs.forEach(str => { const processed = str.replace(/^\.|\.$/g, ''); console.log(`原字符串:"${str}" → 处理后:"${processed}"`); });
Python
import re test_strs = [".www.cat.com.", ".www.cat.com", "www.cat.com", "www.cat.com."] for s in test_strs: processed = re.sub(r'^\.|\.$', '', s) print(f'原字符串:"{s}" → 处理后:"{processed}"')
适配其他指定字符
如果要处理其他字符(比如感叹号!、逗号,),只需要把正则里的\.换成目标字符即可。比如处理感叹号的正则是:
^!|!$
内容的提问来源于stack exchange,提问作者Wronski
相关产品推荐
相关产品推荐

