Skip to main content
 首页 » 编程设计

python之REGEX:删除带有一个或两个字母的字符串之间的空格

2025年05月04日13yxwkf

考虑下表第一列中显示的以下原始字符串:

Original String                  Parsed String                   Desired String 
'W. & J. JOHNSON LMT.COM'       #W    J  JOHNSON LIMITED        #WJ JOHNSON LIMITED 
'NORTH ROOF & WORKS CO. LTD.'   #NORTH ROOF   WORKS CO  LTD     #NORTH ROOF WORKS CO LTD 
'DAVID DOE & CO., LIMITED'      #DAVID DOE   CO   LIMITED       #DAVID DOE CO LIMITED 
'GEORGE TV & APPLIANCE LTD.'    #GEORGE TV   APPLIANCE LTD      #GEORGE TV APPLIANCE LTD  
'LOVE BROS. & OTHERS LTD.'      #LOVE BROS    OTHERS LTD        #LOVE BROS OTHERS LTD 
'A. B. & MICHAEL CLEAN CO. LTD.'#A  B    MICHAEL CLEAN CO  LTD  #AB MICHAEL CLEAN CO LTD 
'C.M. & B.B. CLEANER INC.'      #C M    B B  CLEANER INC        #CMBB CLEANER INC 

需要删除标点符号,我已按如下方式完成:

def transform(word): 
    word = re.sub(r'(?<=[A-Za-z])\'(?=[A-Za-z])[A-Z]|[^\w\s]|(.com|COM)',' ',word) 

然而,还有最后一点我没能得到。删除标点符号后,我得到了很多空格。我怎样才能有一个正则表达式将首字母放在一起并为常规单词保留单个空格(没有首字母)?

用这种替换上述字符来获取所需字符串的方法不好吗?

感谢您让我继续学习:)

请您参考如下方法:

我认为分部分执行此操作更简单。首先,删除 .com 和除 space 或 & 之外的任何标点符号。然后,删除仅由一个字母包围的 space 或 &。最后,用一个空格替换所有剩余的 space 或 & 序列:

import re 
strings = ['W. & J. JOHNSON LMT.COM', 
'NORTH ROOF & WORKS CO. LTD.', 
'DAVID DOE & CO., LIMITED', 
'GEORGE TV & APPLIANCE LTD.', 
'LOVE BROS. & OTHERS LTD.', 
'A. B. & MICHAEL CLEAN CO. LTD.', 
'C.M. & B.B. CLEANER INC.' 
] 
 
for s in strings: 
    s = re.sub(r'\.COM|[^a-zA-Z& ]+', '', s, 0, re.IGNORECASE) 
    s = re.sub(r'(?<=\b\w)\s*[ &]\s*(?=\w\b)', '', s) 
    s = re.sub(r'\s*[& ]\s*', ' ', s) 
    print s 

输出

WJ JOHNSON LMT 
NORTH ROOF WORKS CO LTD 
DAVID DOE CO LIMITED 
GEORGE TV APPLIANCE LTD 
LOVE BROS OTHERS LTD 
AB MICHAEL CLEAN CO LTD 
CM BB CLEANER INC 

Demo on rextester

更新

这是在编辑更改最后数据所需结果的问题之前编写的。鉴于编辑,上面的代码可以简化为

for s in strings: 
     s = re.sub(r'\.COM|[^a-zA-Z ]+|\s(?=&)|(?<!\w\w)\s+(?!\w\w)', '', s, 0, re.IGNORECASE) 
     print s 

Demo on rextester