正则表达式可从任何地方排除任何数字

时间:2019-02-17 19:50:03

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

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

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

import re

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

该代码应在任何位置完全丢弃包含9的数字。

例如,如果输入是: “这是67和98”

输出:['67']

输入:“这是数字678975或56783或87290,就是这样”

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

2 个答案:

答案 0 :(得分:1)

我认为您应该尝试使用:

Require Import ZArith. (* I assume you already imported this, since you're using Z *)

Definition verify_eq (first : Z) (second : Z) : Z :=
   if Z.eqb first second then 0 else 1.

相反。

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

我尝试了:12313491 a asfasgf 12340 asfasf 123159

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

(您的代码返回数组。如果要连接数字,则应添加一些代码)

答案 1 :(得分:1)

听起来好像您不希望匹配不包含9的所有数字。 您的模式应与任何不包含9的数字字符串匹配,但结尾应以非数字开头

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

这里的模式正在做几件事。

  1. (?<= ...)是积极的看法。这意味着我们只会得到前面有非数字的匹配项。
  2. [0-8] +将匹配1个或多个除9之外的数字
  3. (?= ...)是超前的。我们只会得到以非数字结尾的匹配项。

注意:

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

inputString = ' ' + inputString + ' '

查看python re docs以获得更多信息