我不擅长正则表达式,一直尝试但未能从 python 中的一列中提取。 numbers, decimals and -
如果可以删除空格就更好了,但如果不删除,那么仍然是可以管理的。
我已经测试过^(\d.+)|[-]
和^(\d.+)|[-]?[^a-z]+$/i
,但是^(\d.+)|[-]?(\d+)?
它们都无法正常工作。
测试用例(基本上这些是格式不一致的范围)
28193.13
28913
28913-13
28193.13-28193.13
28193.13 - 28193.13
28193.13 - 28193.13 / cm
- 28193.13
-28193.13
28913-
28913 -
数据框
test_df = pd.DataFrame({"Range": [28193.13,28913,'28913-13','28193.13-28193.13',
'28193.13 - 28193.13','28193.13 - 28193.13 / cm', '- 28193.13','28913-','28913 -']})
test_df
尝试的代码:test_df['Range'].str.extract(r"^(\d.+)|[-]?[^a-z]+$/i")
上述案例的预期结果:
28193.13
28913
28913-13
28193.13-28193.13
28193.13-28193.13
28193.13-28193.13
-28193.13
-28193.13
28913-
28913-
问题:我无法28193.13 - 28193.13 / cm
用我的正则表达式代码从中删除字符,因为期望的结果是28193.13-28193.13
。
工具:我使用过这个正则表达式测试网站来测试正则表达式代码
感谢任何帮助。
我认为这是使用正则表达式的一个很好的修复方法。
您还可以更有力地解决这个问题:
从内置正则表达式文档中使用 re.sub (re)
从技术上讲,re 不是正则表达式,但对于大多数用例来说,re 更好,因为它内置有“import re”并且不需要 pip install。
上述链接中的文档:
返回用替换 repl 替换 string 中最左边不重叠的 pattern 后得到的字符串。如果未找到模式,则返回未改变的 string。repl 可以是字符串或函数;如果是字符串,则处理其中的任何反斜杠转义。也就是说,\n 转换为单个换行符,\r 转换为回车符,等等。未知的 ASCII 字母转义保留以备将来使用并视为错误。其他未知转义(如 &)则保留。反向引用(如 \6)将替换为模式中第 6 组匹配的子字符串。