Python 删除字符串后面的数字组中的空格

Python 删除字符串后面的数字组中的空格,python,regex,Python,Regex,我试图删除紧跟在字符串后面的数字之间的空格(pobox) 我可以使用re.match和一些替换逻辑来实现这一点,但如果我可以使用条件re.sub来实现这一点,它肯定会更漂亮 如何将捕获组集成到正则表达式子类中 我尝试了下面的许多不同版本的代码,但都没有成功: my_string=“邮箱12 34 5海森堡902 rr 15” re.sub(r'(?:邮政信箱)([0-9]+)',r',my_字符串) 预期成果: po box 12 59 76 => po box 12

我试图删除紧跟在字符串后面的数字之间的空格(
pobox

我可以使用
re.match
和一些替换逻辑来实现这一点,但如果我可以使用条件
re.sub
来实现这一点,它肯定会更漂亮

如何将捕获组集成到正则表达式子类中

我尝试了下面的许多不同版本的代码,但都没有成功:

my_string=“邮箱12 34 5海森堡902 rr 15”
re.sub(r'(?:邮政信箱)([0-9]+)',r',my_字符串)
预期成果:

po box 12 59 76           => po box 125976
po box 56 56 barry 56 87  => po box 5656 barry 56 87
barry box 56 87           => barry box 56 87
我把这些放在一起得到了预期的效果,但并不理想

my_string=“邮箱12 34 5海森堡902 rr 15”
match=re.match(r'po box([0-9]+)',my_字符串)
如果匹配:
#删除数字之间的空格
无空格_编号=匹配。组(1)。替换(“”,“”)
#获取原始字符串位置
开始=匹配。范围(1)[0]
结束=匹配。跨度(1)[1]
#获取原始字符串的开始和结束部分
第一部分=我的字符串[:开始]
第二部分=我的字符串[结束:]
#连接开始+删除的空格部分+结束
打印(“{}{}{}.”格式(第一部分,无空格的第二部分,第二部分).strip())
您可以使用

重新导入
my_strings=[“邮箱12 34 5海森堡902 rr 15”,“邮箱12 59 76”,“邮箱56 56巴里56 87”,“巴里56 87”]
p=重新编译(r'\b(po\s+box\s*)(\d+(?:\s+\d+))
对于my_字符串中的s:
打印(s,'=>',p.sub(lambda x:f“{x.group(1)}{.”连接(c代表x.group(2.split())}),s))
看。输出:

12 34 5号邮箱海森堡902 rr 15=>12345号邮箱海森堡902 rr 15
邮箱12 59 76=>邮箱125976
邮政信箱56巴里56 87=>邮政信箱5656巴里56 87
巴里盒子56 87=>巴里盒子56 87
正则表达式是

\b(po\s+box\s*)(\d+(?:\s+\d+)
看。详情:

  • \b
    -单词边界
  • (po\s+box\s*)
    -第1组:
    po
    ,1+空格,
    box
    ,0+空格
  • (\d+(?:\s+\d+)
    -第2组:1+个数字以及1+个空格和1+个数字的一次或多次出现
f“{x.group(1)}{.”join(c代表x.group(2).split()中的c)}”
replacement是组1和组2的串联,删除了所有空格