我想找到一个正则表达式来转换字符串,如下所示:
wienerstr256pta 18 graz austria8051 4
进入下面一个:
wienerstr 256 pta 18 graz austria 8051 4
所以我只想围绕空格之间的每个数字集。
我知道我可以通过以下方式轻松找到数字:
/[0-9]+/g
但是如何用相同的内容和额外的空格替换这个匹配?
答案 0 :(得分:1)
您可以找到非数字/非空白与数字之间的所有位置,或数字与非数字/非空白之间的所有位置,并在那里插入空格:
(?<=[^0-9\s])(?=[0-9])|(?<=[0-9])(?=[^0-9\s])
替换为空格。
请参阅regex demo。
<强>详情
(?<=[^0-9\s])
- 匹配一个紧跟数字和空格之外的字符的位置...... (?=[0-9])
- 后面跟着一个数字|
- 或(?<=[0-9])
- 匹配紧跟数字和(?=[^0-9\s])
- 后跟一个数字和空格以外的字符。熊猫测试:
>>> from pandas import DataFrame
>>> import pandas as pd
>>> col_list = ['wienerstr256pta 18 graz austria8051 4']
>>> rx = r'(?<=[^0-9\s])(?=[0-9])|(?<=[0-9])(?=[^0-9\s])'
>>> df = pd.DataFrame(col_list, columns=['col'])
>>> df['col'].replace(rx," ", regex=True, inplace=True)
>>> df['col']
0 wienerstr 256 pta 18 graz austria 8051 4
Name: col, dtype: object
答案 1 :(得分:-1)
echo "wienerstr256pta18graz austria8051 4" \
| sed -r "s/([^0-9])([0-9])/\1 \2/g;s/([0-9])([^0-9])/\1 \2/g;s/ */ /g"
wienerstr 256 pta 18 graz austria 8051 4
将每个数字更改替换为非数字或非数字更改为数字,两者之间均为空白。最后将多个空白压缩为一个,因为空白也是非数字。
保持多个空白 - 可能在输入中 - 一起:
echo "wienerstr256pta18graz austria8051 4" | sed -r "s/([^0-9 ])([0-9])/\1 \2/g;s/([0-9])([^0-9 ])/\1 \2/g;"
wienerstr 256 pta 18 graz austria 8051 4