你可以用
import pandas as pd
df = pd.DataFrame({'Orders':['12','123456789','1234567890','123456789/1234567890','123456789/1/123456789','123456789+1234567890', 'Order number: 6508955960_000010_1005500']})
df["Result"] = df["Orders"].str.findall(r'[/+ #_;.-]?(?<![0-9])[0-9]{9,10}(?![0-9])').str.join('').str.lstrip('/+ #_;.-')
df.loc[df['Result'] == '', 'Result'] = np.nan
看regex demo.Details
[/+ #_;.-]?(?<![0-9])[0-9]{9,10}(?![0-9])
-匹配可选的/
、+
、空格、#
、_
、;
、.
或-
个字符,然后匹配无或不包含其他数字的十位数
Series.str.findall
提取所有事件
.str.join('')
将匹配项连接成单个字符串
.str.lstrip('/+ #_;.-')
-删除与字符串开头的数字匹配的特殊字符
df.loc[df['Result'] == '', 'Result'] = np.nan
-如果需要-用Result
列中的np.nan
个值替换空字符串.
输出:
>>> df
Orders Result
0 NaN NaN
1 123456789 123456789
2 1234567890 1234567890
3 123456789/1234567890 123456789/1234567890
4 123456789/1/123456789 123456789/123456789
5 123456789+1234567890 123456789+1234567890
>>>