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']