我有这样的正则表达式
/^((.{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,并且所有位数都不同。例如:
我必须检查输入A和输入B在同一位置是否有n位数字
举个例子:
因此,如果n为1,则正则表达式应返回句柄。如果n> 1否,因为输入A和输入B中只有数字3处于相同位置。
答案 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}