python - 用字符串和附加到它的数字的长度替换字符串中的数字

标签 python regex

基本上,我需要在数据框中提取一个包含字符和数字组合的列,例如“XYZABC/123441 s sdx”和类似类型

我需要删除所有标点符号、单字母单词、将双空格替换为单空格、修剪字符串并将数字替换为“NUMB#”,其中“#”代表数字的长度。所以这里的 '123441' 将被替换为 "NUMB6"等等。

我当前的代码是:

for x in df["colname"]:
    x = re.sub(r"[^\w\s]", " ", str(x))      #Removes all punctuations
    x = re.sub(r"\d+", "NUMB", str(x))       #Replaces digits with 'NUMB'
    x = re.sub(r"\b[a-zA-Z]\b", "", str(x))  #Removes all single characters
    x = re.sub(r"\s+", " ", str(x))          #Removes double spaces with single space
    x = x.strip().upper()                    #Trims the string

现在我确实在网站上看到一个关于如何用长度替换子字符串的问题:

re.sub(r'\b([A-Z][a-z]*)\b', lambda m: str(len(m.group(1))), s)

我在这里需要做的就是将“([A-Z][a-z]*)”替换为“\d”。但是,我不知道如何将两者附加在一起,'.append' 函数不起作用。这可能是一件基本的事情,但我是 Python 的新手,所以我不确定该怎么做

最佳答案

你可以像这样使用apply

def repl(x):
    return re.sub(r'\d+', lambda m: "NUMB{}".format(len(m.group())), x)

 df['colname'] = df['colname'].apply(repl)

或者使用与代码中相同的逻辑,将 x = re.sub(r"\d+", "NUMB", str(x)) 替换为

x = re.sub(r'\d+', lambda m: "NUMB{}".format(len(m.group())), x)

re.sub(r'\d+', lambda m: "NUMB{}".format(len(m.group())), x) 会找到任何不重叠的数字 block ,并将用 NUMB 和数字 block 的长度替换它们。

关于python - 用字符串和附加到它的数字的长度替换字符串中的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46601330/

相关文章:

python - 如何使用 django 应用程序在 AWS S3 中上传文件?

python - shell 不尊重解释器?

c# - 正则表达式检查文件格式是否符合 C# 中的预期

.htaccess 中的正则表达式 - 如果在 HTTP_HOST 中找到一个 uri,我该如何 301?

java正则表达式匹配

c# - Entity Framework - 如何将我的特定代码转换为 MySQL 可以理解的表达式

python - 类型错误 : object of type 'numpy.int64' has no len()

Python 3 : applying recursion to compare lists?

python - Matplotlib 具有不同字体大小的多行轴文本

C# .NET4.5.1 正则表达式奇怪?