匹配多个特定位置

时间:2018-12-25 10:16:47

标签: python regex

我有这样的正则表达式

/^((.{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:
    ...

但是我被困在这里..任何想法吗?

更新

我在输入中有2个字符串。它们始终是4位数字的字符串。位数范围是0-9,并且所有位数都不同。例如:

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

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

举个例子:

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

因此,如果n为1,则正则表达式应返回句柄。如果n> 1否,因为输入A和输入B中只有数字3处于相同位置。

1 个答案:

答案 0 :(得分:0)

我不确定我是否100%正确地理解了您的答案,但我的理解是:写一个与字符串匹配的正则表达式“前4个字符正好4个数字,所有字符都不相同,并且字符串”

可以使用负前瞻和反向引用(和组)来实现。正则表达式如下:

因此,我们应该有一个数字\d。然后是另一个数字\d,它与第一个[match] (?!\1)不同。然后再输入一个数字\d,它与之前的两个匹配项(?!(\1|\2))不同,依此类推。

以下是完整的正则表达式,其中添加了空格以提高可读性:

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

如果需要使其与整个字符串和某些特定位置匹配,则可以删除^ / $并在\D(不是数字)上撒上{{1} },*中的+

PS:我建议阅读此网站https://www.regular-expressions.info/,并阅读所有内容和一些练习(通过在StackOverflow上回答问题是一种很好的练习方式),您将成为正则表达式专家,我答应你。

PPS:在实际项目中,我将完全实现不带正则表达式的功能。

{10}