ReGex用于包含空格的周围数字

时间:2018-03-09 11:05:13

标签: python regex string pandas

我想找到一个正则表达式来转换字符串,如下所示:

wienerstr256pta 18 graz austria8051 4

进入下面一个:

wienerstr 256 pta 18 graz austria 8051 4

所以我只想围绕空格之间的每个数字集。

我知道我可以通过以下方式轻松找到数字:

/[0-9]+/g

但是如何用相同的内容和额外的空格替换这个匹配?

2 个答案:

答案 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