如何创建能够接受任何字符的模式,但后续字符应该与第一个字符相同?例如,ax + bx + x,其中a、b和x可以是任意字符,但“x”字符必须保持不变。我正在尝试创建一个模式来识别二次方(ax^2+bx+c),但我意识到使用我的模式,使用两个不同的字母将匹配该模式。模式:
r"([\d+]*)([\D])\^2\+?\-?([\d+]*)([^\+\-\d])\+?\-?([\d+])+$"发布于 2017-03-30 20:04:56
对于解析器来说,这可能是一个更好的工作。即使只是为了匹配。但是,如果您坚持使用regex,则可以执行以下操作:
^(?:\d+|\D)(\D)(?:[+\-*\/^](?:\d+\1?|\D\1?))+$它将匹配输入,如下所示:
ax
ax+bx+x
ay+ay+y
ax^2+bx+c它的工作方式是匹配\D,然后捕获后续的\D。然后每次发现2个字符时,第二个字符必须是以前匹配的字符(\D\1?)。
如果你想事先拥有像2+这样的东西。然后就变得更棘手了:
^(?:\d+[+\-*\/^](?:\d+[+\-*\/^])*)?\D(\D)(?:[+\-*\/^](?:\d+\1?|\D\1?))*$它将匹配输入,如下所示:
ax
ax+bx+x
ay+ay+y
ax^2+bx+c
2+ax
2+ax+bx
2-1+ax+bx如果需要匹配小数而不仅仅是整数,那么将这些\d+转换为\d+(?:\.\d+)?。
^(?:\d+(?:\.\d+)?[+\-*\/^](?:\d+(?:\.\d+)?[+\-*\/^])*)?\D(\D)(?:[+\-*\/^](?:\d+(?:\.\d+)?\1?|\D\1?))*$请注意,这并没有考虑到白空间,因此如果需要的话,您必须在其中撒几个\s*。
https://stackoverflow.com/questions/43126768
复制相似问题