【问题标题】:Regex expression to exclude any number from any place正则表达式从任何地方排除任何数字
【发布时间】:2019-02-17 19:50:03
【问题描述】:

我有一个代码,它将字符串作为输入并丢弃所有字母并仅在任何位置打印不包含 9 的数字。 我决定在正则表达式的帮助下完成,但在需要修改的地方找不到工作表达式来实现它?

我也尝试过[^9],但它不起作用。

import re

s = input().lstrip().rstrip()
updatedStr = s.replace(' ', '')
nums = re.findall('[0-8][0-8]', updatedStr)
print(nums)

代码应该完全丢弃任何地方包含9的数字。

例如 - 如果输入是:

"This is 67 and 98"

输出:['67']

输入:

"This is the number 678975 or 56783 or 87290 thats it"

输出:['56783'](因为其他两个数字在某些地方包含 9)

【问题讨论】:

    标签: python python-3.x regex string python-re


    【解决方案1】:

    我认为你应该尝试使用:

    nums=re.findall('[0-8]+',updatedStr)
    

    相反。

    [0-8]+ 表示“一个或多个从 0 到 8 的数字出现”

    我试过了:12313491 a asfasgf 12340 asfasf 123159

    得到:['123134', '1', '12340', '12315']

    (您的代码返回数组。如果您想加入数字,您应该添加一些代码)

    【讨论】:

    • 它不起作用,因为它正在打印包含数字 9 的数字以及不包含 9 的数字
    • 你是对的。在这种情况下,也许这个正则表达式可以帮助你: \b[^9a-zA-Z.,\s]+\b 如果你在regexr.com 上尝试它,你会得到你正在寻找的结果。然后我们将看看 Python 的 re 库是如何响应的
    【解决方案2】:

    听起来您不想匹配所有不包含 9 的数字。 您的模式应匹配任何不包含 9 但以非数字结尾和开头的数字字符串

    pattern = re.compile('(?<=[^\d])[0-8]+(?=[^\d])')
    pattern.findall(inputString) # Finds all the matches
    

    这里的模式做了几件事。

    1. (?
    2. [0-8]+ 将匹配除 9 之外的 1 个或多个数字
    3. (?=...) 是一个前瞻。我们只会得到以非数字结尾的匹配项。

    注意:

    inputString 不需要被剥离。事实上,如果字符串的开头或结尾有数字,这种模式可能会遇到问题。为了防止这种情况。只需用任何字符填充它。

    inputString = ' ' + inputString + ' '
    

    查看 python re docs 了解更多信息

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多