正则表达式替换混合数字和字符串

3

我想要删除所有包含数字的单词,例如:

LW23 London W98 String

从上面的字符串中,我只想要保留"London String"。这可以通过正则表达式完成。

我目前正在使用Python,但PHP代码也可以。

谢谢!

编辑:

目前我能做到以下:

>>> a = "LW23 London W98 String"
>>> b = a.split(' ')
>>> a
['LW23', 'London', 'W98', 'String']

正则表达式以删除句子中包含数字的所有单词。 - loler
6个回答

6

是的,你可以:

result = re.sub(
    r"""(?x) # verbose regex
    \b    # Start of word
    (?=   # Look ahead to ensure that this word contains...
     \w*  # (after any number of alphanumeric characters)
     \d   # ...at least one digit.
    )     # End of lookahead
    \w+   # Match the alphanumeric word
    \s*   # Match any following whitespace""", 
    "", subject)

谢谢!这就是我一直在寻找的解决方案。 - prototype

3

我想这取决于“单词”的定义,但如果我们谈论的是空格作为分隔符,并且它不必是一个正则表达式:

>>> ' '.join(filter(str.isalpha, a.split()))
'London String'

@SilentGhost 是的 - 很好地捕捉到了 - 我一直在专注于示例字符串 - 我的错。 - Jon Clements
这个问题没有提到标点符号 - 比如 LW23, London 应该怎么处理?只要涉及到空格,对我来说这是最好的答案。 - georg

3
你可以尝试使用 preg_replace 函数和以下模式进行替换:
/(\w*\d+\w*)/

类似这样的 $esc_string = preg_replace('/(\w*\d+\w*)/', '', $old_string);

可以将正则表达式中包含数字的单词替换为空字符串。

1
你可以使用正则表达式和推导式来完成这个操作:
clean = [w for w in test.split(' ') if not re.search("\d", w)]

或者

words = test.split(' ')
regex = re.compile("\d")
clean = [w for w in words if not regex.search(w) ]

输入:

"LW23 London W98 String X5Y 99AP Okay"

输出:

['London', 'String', 'Okay']

1

我并不能百分之百确定,这只是一种可能的解决方案建议,虽然我不是Python大师,但如果我看到完整的代码,我应该会更清楚如何操作。

我的建议是将字符串的各个部分添加到一个列表中,弹出每个单词,并使用if函数检查数字并删除包含数字的单词,如果不包含数字则添加到新列表中,然后重新排序列表以使单词按适当顺序排列。

如果这样的建议没有帮到您,我感到很抱歉,但我知道如果我遇到这样的问题,这种解决方案通常是我的起点。


由于这是您的第一个答案,我会给您+1,但是在未来,请发布一些可工作的代码,而不是描述您将如何执行该操作。 - georg

0

您可以使用正则表达式来匹配包含数字的单词

/\w*\d+\w*/

或者您可以匹配所有不带数字的单词(并保留它们)

/\w+/

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接