【问题标题】:Cleaning column using regex remove character based on conditions使用正则表达式清理列根据条件删除字符
【发布时间】:2020-12-18 14:24:34
【问题描述】:

我正在尝试弄清楚如何处理以下情况:

我有手动输入的原始数据和几个不必要的字符,我需要清理该列。

如果少于 5 个字母,则应删除 (-,/,!,#) 等符号后面的任何内容。

原始数据

美国纽约 - LND 英国

GBKTG-U

DUB AE-EUUSA

美国-TY

SG !S

CNZOS !C 海

嘎嘎"T

AEU DGR# UK,GBR

期望的输出

LND 英国

GBKTG

欧洲美国

美国

SG

CNZOS

嘎嘎

英国GBR

【问题讨论】:

  • 我不清楚“任何少于 5 个字母的内容”?你能详细说明一下吗?例如:在“NYC USA - LND UK”中,“NYC USA”不少于 5 个字母但您在输出中删除了,为什么?
  • @uguros 嗨,该列有时有起点和终点,我只需要终点。所以这就是为什么我需要删除 NYC USA。有时一个人只有随机的符号和没有意义的字母,例如 GAGAX"T 必须是 GAGAX。

标签: python regex replace python-re


【解决方案1】:

根据需要使用调整separator ([^\w\s]) 的正则表达式组在origindestination 之间拆分每一行。接下来,计算分隔符右侧的字母数,以检查规定的字母数。

详情:

  • (.*?) : 捕获组 - 零个或多个字符(行尾除外)非 greddy
  • [^\w\s] :后跟任何字母、数字、下划线 ([a-z-A-Z0-9_]) 或空格的字符
  • (.*) : 捕获组 - 零个或多个字符(行尾除外)

文件sample.txt用作输入

NYC USA - LND UK
GBKTG-U
DUB AE- EUUSA
USA -TY
SG !S
CNZOS !C SEA
GAGAX"T
AEU DGR# UK,GBR
import re

f = open("sample.txt", "r")
txt = f.read()

dest = []
r = re.findall(r"(.*?)[^\w\s](.*)", txt)
for f in r:
    if sum([i.isalpha() for i in f[1]]) >= 5:
        dest.append(f[1].strip())
    else:
        dest.append(f[0].strip())

print(dest)
['LND UK', 'GBKTG', 'EUUSA', 'USA', 'SG', 'CNZOS', 'GAGAX', 'UK,GBR']

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-01
    • 1970-01-01
    • 2014-04-18
    • 2020-07-03
    • 1970-01-01
    相关资源
    最近更新 更多