Re 正则表达式操作,去掉句点?
Re Regular expression operations, remove periods?
我正在使用我创建的函数来拆分下面的示例行以删除独立数值 (123),但它也会删除我需要的尾随数字。我也不知道如何删除“0.0”
ABC/0.0/123/TT1/1TT//
cleaned_data = []
def split_lines(lines, delimiter, remove = '[0-9]+$'):
for line in lines:
tokens = line.split(delimiter)
tokens = [re.sub(remove, "", token) for token in tokens]
clean_list = list(filter(lambda e:e.strip(), tokens))
cleaned_data.append(clean_list)
print(clean_list)
split_lines(lines, "/")
下面是现在出现的内容,请注意 0. 和缺少尾随 1 的“TT”。
[ABC], [0.], [TT], [1TT]
也尝试包括行锚点 (^) 的开头。
cleaned_data = []
def split_lines(lines, delimiter, remove = '^[0-9.]+$'):
for line in lines:
tokens = line.split(delimiter)
tokens = [re.sub(remove, "", token) for token in tokens]
clean_list = list(filter(lambda e:e.strip(), tokens))
cleaned_data.append(clean_list)
print(clean_list)
split_lines(lines, "/")
我只是将 remove
参数的默认值更改为“^[0-9.]+$”,它仅在 entire 搜索字符串是数字(或句点)。
你真的需要正则表达式吗?如果您只使用 str.split()
并尝试将结果值转换为 float
:
,则此工作会简单得多
def split_lines_remove_numeric(lines, delimiter):
for line in lines:
clean_list = []
for item in line.split(delimiter):
if not item: continue # Skip this item if it's empty
try:
# Convert to float
float(item)
except ValueError: # Enter this block if conversion threw an error
clean_list.append(item)
print(clean_list)
然后,调用此函数删除您想要的值:
>>> split_lines_remove_numeric(["ABC/0.0/123/TT1/1TT//"], "/")
['ABC', 'TT1', '1TT']
我正在使用我创建的函数来拆分下面的示例行以删除独立数值 (123),但它也会删除我需要的尾随数字。我也不知道如何删除“0.0”
ABC/0.0/123/TT1/1TT//
cleaned_data = []
def split_lines(lines, delimiter, remove = '[0-9]+$'):
for line in lines:
tokens = line.split(delimiter)
tokens = [re.sub(remove, "", token) for token in tokens]
clean_list = list(filter(lambda e:e.strip(), tokens))
cleaned_data.append(clean_list)
print(clean_list)
split_lines(lines, "/")
下面是现在出现的内容,请注意 0. 和缺少尾随 1 的“TT”。
[ABC], [0.], [TT], [1TT]
也尝试包括行锚点 (^) 的开头。
cleaned_data = []
def split_lines(lines, delimiter, remove = '^[0-9.]+$'):
for line in lines:
tokens = line.split(delimiter)
tokens = [re.sub(remove, "", token) for token in tokens]
clean_list = list(filter(lambda e:e.strip(), tokens))
cleaned_data.append(clean_list)
print(clean_list)
split_lines(lines, "/")
我只是将 remove
参数的默认值更改为“^[0-9.]+$”,它仅在 entire 搜索字符串是数字(或句点)。
你真的需要正则表达式吗?如果您只使用 str.split()
并尝试将结果值转换为 float
:
def split_lines_remove_numeric(lines, delimiter):
for line in lines:
clean_list = []
for item in line.split(delimiter):
if not item: continue # Skip this item if it's empty
try:
# Convert to float
float(item)
except ValueError: # Enter this block if conversion threw an error
clean_list.append(item)
print(clean_list)
然后,调用此函数删除您想要的值:
>>> split_lines_remove_numeric(["ABC/0.0/123/TT1/1TT//"], "/")
['ABC', 'TT1', '1TT']