使用正则表达式匹配地址行任意单词并替换空格为+的问题
解决方案
问题根源
你之前的正则有两个明显问题:
- 开头字符集
[a-zA-Z#-]未包含数字,导致以数字开头的行(如24567 london UK、56-67 france germany germany 67886)无法匹配 - 用固定的
\s(.+)分组,只能适配4个元素的行,无法支持任意数量的空格分隔内容
实现步骤
1. 匹配所有目标行
用以下正则匹配所有符合格式的地址行:
^[\w#-].*$
^:定位行起始位置[\w#-]:匹配行首的字母、数字、下划线、#或-,覆盖你所有示例行的开头.*$:匹配行内剩余所有内容直到行尾
2. 替换空格为+
无需复杂分组,直接将行内所有空白字符替换为+即可,根据使用场景选择对应实现:
- Python 代码:
import re raw_lines = [ "#23 newyork USA 56778", "24567 london UK ", "56-67 france germany germany 67886" ] # 替换所有连续空格为+,同时去除行尾多余空格(可选) processed_lines = [re.sub(r'\s+', '+', line.rstrip()) for line in raw_lines] - Shell sed 命令:
# 替换所有单个空格为+ sed 's/ /+/g' your_address_file.txt # 替换连续空格为单个+ sed 's/\s\+/+/g' your_address_file.txt
最终效果
处理后你会得到:
#23+newyork+USA+5677824567+london+UK56-67+france+germany+germany+67886
内容的提问来源于stack exchange,提问作者Dinesh
相关产品推荐
相关产品推荐

