如何使用正则表达式替换单词之间的空格?

3
我正在尝试将一串单词和数字转换成列表,每个项目都以空格分隔,因此使用.replace(" ", ",").split(",")是一个简单的解决方案,但不幸的是,有时对象名称中有多个单词,并且我希望这些单词用下划线连接。

示例:

office supplies 674.56 570.980487 755.84 682.360029

期望输出:

office_supplies 674.56 570.980487 755.84 682.360029

我找到了这个链接: 仅替换字母之间的空格 我尝试按照以下方式实现:
sample_line = "office supplies 674.56 570.980487 755.84 682.360029"
regex = re.compile(':%s/\v(\a)\s(\a)/\1_\2/g', re.I)
print(re.sub(p, r"\1\2", line))

但它似乎没有替换空格,我对正则表达式不是很熟练,但根据链接的问题,它应该可以工作。


你找到的是 vim 的解决方案,而不是 Python。 - anubhava
\D\s\D应该查找非数字字符之间的空格。https://regex101.com/r/t0kOKw/1 - M B
2个回答

4
您可能会使用这个re.sub + split的解决方案:
import re
s = 'office supplies 674.56 570.980487 755.84 682.360029'
print ( re.sub(r'(?<=[a-zA-Z])\s+(?=[a-zA-Z])', '_', s).split() )

输出:

['office_supplies', '674.56', '570.980487', '755.84', '682.360029']

这里:

  • 正则表达式(?<=[a-zA-Z])\s+(?=[a-zA-Z])匹配只被字母包围的1个或多个空格
  • split函数将字符串按空格分割

1
x=r'office supplies 674.56 570.980487 755.84 682.360029'
lead="_".join(x.split()[:2])
trail=" ".join(x.split()[2:])

expected_string = lead + " " + trail
print(expected_string)

谢谢,但问题已经解决了。 - Martin Pedersen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接