输入:
df=pd.DataFrame({'text':['value 123* 333','122* 666','722 888*']})
print(df)
text
0 value 123* 333
1 122* 666
2 722 888*
我需要从df['text']
中提取仅数值,但没有 *
标签
我的代码:
df.text.str.extract(r'([0-9]+|[0-9]+\.[0-9]+)')
但是使用此代码,值带有 *
返回右侧的字符。
预期输出:
text
333
666
722
最佳答案
您可以使用
df['text'].str.extract(r'(?=([0-9]+(?:\.[0-9]+)?))\1(?!\*)')
请参阅regex demo 。或者,您可能还需要在左侧使用 r'\b(?=([0-9]+(?:\.[0-9]+)?))\1(?!\*)'
。请参阅this regex demo .
正则表达式详细信息
(?=([0-9]+(?:\.[0-9]+)?))
- 正向前瞻,需要并将以下序列捕获到组 1 中右边的图案:[0-9]+
- 1+ 位数字(?:\.[0-9]+)?
- 可选的.
序列和 1+ 位数字。
\1
- 第 1 组的值(?!\*)
- 如果紧邻右侧有一个*
字符,则表示匹配失败的负向前瞻。
查看Python测试:
>>> import pandas as pd
>>> df=pd.DataFrame({'text':['value 123* 333','122* 666','722 888*']})
>>> df['text'].str.extract(r'(?=([0-9]+(?:\.[0-9]+)?))\1(?!\*)')
0 333
1 666
2 722
Name: text, dtype: object
>>>
关于python - 取行中不带标签的数值,正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61013644/