2

我有一个代码,它将字符串作为输入并丢弃所有字母并仅在任何地方打印不包含 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)

4

2 回答 2

1

我认为你应该尝试使用:

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

反而。

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

我试过:12313491 a asfasgf 12340 asfasf 123159

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

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

于 2019-02-17T20:51:39.613 回答
1

听起来您不想匹配所有不包含 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 文档以获取更多信息

于 2019-02-18T23:57:35.130 回答