[英]Insert space between specific characters but not if followed by specific characters regex
我希望使用python regex在Alpha字符和数字之间插入一个空格(Alpha始终以数字开头),但不要在(数字和连字符)之间(在数字和下划线之间)插入空格。
理想情况下,我希望它替换行上的所有此类示例(请参见下面的第三个示例字符串) ,但是即使仅执行第一个示例也很棒。
我已经走了这么远:
import re
item = "Bob Ro1-1 Fred"
txt = re.sub(r"(.*)(\d)", r"\1 \2", item)
print(txt) #prints Bob Ro1 -1 Fred (DESIRED WOULD BE Bob Ro 1-1 Fred)
我试过贴?
在各个地方进行搜索,但是还没有找到魔术。
示例字符串:
Original ==> Desired output
1.“ Bob Ro1 Sam cl3”==>
“ Bob Ro 1 Sam cl 3”
2.“ Some Guy ro1-1 Sam”==>
“ Some Guy ro1-1 Sam”
3.“ ribrib ribbit ro3_2 bob wow cl1-3”==>
“ ribbit ribbit ro 3_2 bow wow cl1-3”
您可以使用
re.sub(r'([^\W\d_])(\d)', r'\1 \2', s)
使用环视方法的一种变体 :
re.sub(r'(?<=[^\W\d_])(?=\d)', ' ', s)
([^\\W\\d_])(\\d)
正则表达式匹配并将任何单个字母捕获到组1中,并将下一个数字捕获到组2中。 然后, \\1 \\2
替换模式将组1中的字母,空格和组2中的数字插入到结果字符串中。
(?<=[^\\W\\d_])(?=\\d)
与字母和数字之间的位置匹配,因此,替换字符串仅包含一个空格。
参见Python演示 :
import re
strs = [ 'Bob Ro1-1 Fred', 'Bob Ro1 Sam cl3', 'Some Guy ro1-1 Sam', 'ribbet ribbit ro3_2 bob wow cl1-3' ]
rx = re.compile(r'([^\W\d_])(\d)')
for s in strs:
print(re.sub(r'([^\W\d_])(\d)', r'\1 \2', s))
print(re.sub(r'(?<=[^\W\d_])(?=\d)', ' ', s))
输出:
Bob Ro 1-1 Fred
Bob Ro 1-1 Fred
Bob Ro 1 Sam cl 3
Bob Ro 1 Sam cl 3
Some Guy ro 1-1 Sam
Some Guy ro 1-1 Sam
ribbet ribbit ro 3_2 bob wow cl 1-3
ribbet ribbit ro 3_2 bob wow cl 1-3
您需要先看后面,再看后面:
(?<=[a-zA-Z])(?=[0-9])
代码应为re.sub(r"(?<=[a-zA-Z])(?=[0-9])", r" ", item)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.