用于替换除字符以外的任何内容、多于一个空格和数字的正则表达式,仅以空字符结尾

Regex for replacing anything other than characters, more than one spaces and number only in end with empty char

我只想用空字符串替换字符、空格和数字以外的任何内容,或者换句话说:我们替换任何数字或字符串开头或中间的空格替换为空字符串。

例子

**Input**    **Output**
Ndd12    Ndd12
12Ndd12  Ndd12
Ndd   12  Ndd 12
Nav  G45up Nav Gup

尝试的代码

regexp_replace(df1[col_name]), "(^[A-Za-z]+[0-9 ])", ""))

如果你使用python,你可以使用正则表达式。
您可以使用 re 模块。

import re

new_string = re.sub(r"[^a-zA-Z0-9]","",s) 

其中 ^ 表示排除。

正则表达式存在于其他语言中。所以找到一个正则表达式会很有帮助。

您可以使用:

\d+(?!\d*$)|[^\w\n]+(?!([A-Z]|$))

RegEx Demo

解释:

  • \d+(?!\d*$):匹配1+个数字后面没有0+个数字和行尾
  • |: 或
  • [^\w\n]+(?!([A-Z]|$)):匹配1+个后面没有大写字母或行尾的非单词字符

我想出了这个正则表达式来捕获要从字符串中删除的所有字符。

^\d+|(?<=\w)\d+(?![\d\s])|(?<=\s)\s+

regexp_replace(df1[col_name]), "^\d+|(?<=\w)\d+(?![\d\s])|(?<=\s)\s+", ""))

Regex Demo

解释:

^\d+ - 从头开始​​捕获序列中的所有数字。

(?<=\w)\d+(?![\d\s]) - 正向后看一个单词字符,负向前看一个数字,后跟 space 并捕获中间的数字序列。 (捕获 G45up 中的数字)

(?<=\s)\s+ - 正向后看 space 后跟一个或多个 spaces,捕获所有额外的 spaces.

注意:这个正则表达式在匹配大字符串时可能效率低下,因为它使用昂贵的环视。

^\d+|(?<=\w)\d+(?![\d\s])|(?<=\s)\s+|(?<=\w)\W|\W(?=\w)|(?<!\w)\W|\W(?!\w)