匹配多个特定位置

2024-05-08 16:55:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个这样的正则表达式

/^((.{0}1.*)|(.{1}2.*)|(.{2}3.*)|(.{3}4.*))$/g

这个匹配每个字符串,其中包含几乎一个数字在相同的位置1234。你知道吗

现在我正在尝试构建一个正则表达式,它在1234的相同位置上几乎匹配n个数字。哪个数字匹配并不重要,重要的是n个数字匹配。所以使用AND运算符在这里没有帮助。 一个想法是构建一个正则表达式,在正确的位置匹配每个字符,然后在我的python代码中,我将编写如下内容:

n_matches = len(re.findall(regex, val))
if n_matches == matches_to_hit:
    ...

但我被困在这里。。你知道吗?你知道吗

更新

我有两个字符串输入。它们总是一个4位数的字符串。数字范围为0-9,所有数字都不同。例如:

  • 123无效
  • 1234有效
  • 9874有效
  • 1231无效
  • 12345无效

我必须检查输入A和输入B是否有n个数字在同一位置

举个例子:

  • 输入A=9837
  • 输入B=1234

因此,如果n是1,那么regex应该返回metch。如果n>;1,则为否,因为在输入A和输入B中只有数字3位于同一位置


Tags: andto字符串代码re内容lenif
1条回答
网友
1楼 · 发布于 2024-05-08 16:55:26

我不确定我是否100%正确地理解了你的答案,但我把它理解为:编写一个正则表达式来匹配一个字符串,“前4个字符正好是4个数字,所有这些数字都不同,字符串中没有其他数字”

这可以通过负的前向和后向引用(和组)来实现。正则表达式如下:

所以我们应该有一个数字\d。然后是另一个数字\d,它与第一个[match](?!\1)不同。然后是另一个数字\d,它与前面的两个匹配项(?!(\1|\2))不同,依此类推。你知道吗

以下是完整的正则表达式,添加了空格以便于阅读:

/^
  (\d)
  (?!\1)(\d)
  (?!(\1|\2))(\d)
  (?!(\1|\2|\3))(\d)
  \D*
  $
/x

如果需要使它匹配整个字符串和某些特定位置,可以根据需要删除^/$,并在\D(不是数字)中添加*+{10}的量词。你知道吗

附言:我建议你阅读这个网站https://www.regular-expressions.info/,在阅读了所有内容并进行了一些练习(顺便说一句,在StackOverflow上回答问题是一个很好的练习方式)之后,我向你保证,你将成为正则表达式大师。你知道吗

PPS:在实际的项目中,我将实现这个w/o正则表达式。你知道吗

digits = [c for c in str if c.isdigit()]
return len(digits) == 4 and len(set(digits)) == 4

相关问题 更多 >

    热门问题