Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
&引用;锁;python正则表达式中的字符选择_Python_Regex - Fatal编程技术网

&引用;锁;python正则表达式中的字符选择

&引用;锁;python正则表达式中的字符选择,python,regex,Python,Regex,您将如何创建一个可以接受任何字符,但任何后续字符都应与第一个字符相同的模式?例如,ax+bx+x,其中a、b和x可以是任何字符,但“x”字符必须保持不变。 我试图创建一个模式来识别二次曲线(ax^2+bx+c),但我意识到,在我的模式中,使用两个不同的字母将匹配该模式。 模式: r"([\d+]*)([\D])\^2\+?\-?([\d+]*)([^\+\-\d])\+?\-?([\d+])+$" 对于解析器来说,这可能是一项更好的工作。即使只是为了匹配。但是,如果您坚持使用正则表达式,则可

您将如何创建一个可以接受任何字符,但任何后续字符都应与第一个字符相同的模式?例如,ax+bx+x,其中a、b和x可以是任何字符,但“x”字符必须保持不变。 我试图创建一个模式来识别二次曲线(ax^2+bx+c),但我意识到,在我的模式中,使用两个不同的字母将匹配该模式。 模式:

 r"([\d+]*)([\D])\^2\+?\-?([\d+]*)([^\+\-\d])\+?\-?([\d+])+$"

对于解析器来说,这可能是一项更好的工作。即使只是为了匹配。但是,如果您坚持使用正则表达式,则可以通过执行以下操作来实现:

^(?:\d+|\D)(\D)(?:[+\-*\/^](?:\d+\1?|\D\1?))+$
将匹配输入,如:

ax
ax+bx+x
ay+ay+y
ax^2+bx+c
ax
ax+bx+x
ay+ay+y
ax^2+bx+c
2+ax
2+ax+bx
2-1+ax+bx
它通过匹配
\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
ax
ax+bx+x
ay+ay+y
ax^2+bx+c
2+ax
2+ax+bx
2-1+ax+bx

如果需要匹配小数而不仅仅是整数,那么将这些
\d+
更改为
\d+(?:\。\d+)


请注意,这并没有将空格考虑在内,因此如果需要,您必须在周围撒上一些
\s*

这不是特定于Python的,请仔细阅读regex语法。如果您定义了以前的捕获组,则可以使用它们的引用