我有以下字符串数值,并且只需要保留数字和小数。我无法为此找到正确的正则表达式。
s = [
"12.45-280", # need to convert to 12.45280
"A10.4B2", # need to convert to 10.42
]
答案 0 :(得分:1)
您还可以删除所有非数字和非点字符,然后将结果转换为float:
In [1]: import re
In [2]: s = [
...: "12.45-280", # need to convert to 12.45280
...: "A10.4B2", # need to convert to 10.42
...: ]
In [3]: for item in s:
...: print(float(re.sub(r"[^0-9.]", "", item)))
...:
12.4528
10.42
此处[^0-9.]
将匹配除数字或字面点之外的任何字符。
答案 1 :(得分:0)
将字符串中的每个字母字符转换为空字符“”
import re
num_string = []* len(s)
for i, string in enumerate(s):
num_string[i] = re.sub('[a-zA-Z]+', '', string)
答案 2 :(得分:0)
您可以选择locale
和正则表达式的组合:
import re, locale
from locale import atof
# or whatever else
locale.setlocale(locale.LC_NUMERIC, 'en_GB.UTF-8')
s = [
"12.45-280", # need to convert to 12.45280
"A10.4B2", # need to convert to 10.42
]
rx = re.compile(r'[A-Z-]+')
def convert(item):
"""
Try to convert the item to a float
"""
try:
return atof(rx.sub('', item))
except:
return None
converted = [match
for item in s
for match in [convert(item)]
if match]
print(converted)
# [12.4528, 10.42]