首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >python正则表达式中的“锁”字符选择

python正则表达式中的“锁”字符选择
EN

Stack Overflow用户
提问于 2017-03-30 19:26:33
回答 1查看 126关注 0票数 0

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

代码语言:javascript
运行
复制
 r"([\d+]*)([\D])\^2\+?\-?([\d+]*)([^\+\-\d])\+?\-?([\d+])+$"
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-30 20:04:56

对于解析器来说,这可能是一个更好的工作。即使只是为了匹配。但是,如果您坚持使用regex,则可以执行以下操作:

代码语言:javascript
运行
复制
^(?:\d+|\D)(\D)(?:[+\-*\/^](?:\d+\1?|\D\1?))+$

它将匹配输入,如下所示:

代码语言:javascript
运行
复制
ax
ax+bx+x
ay+ay+y
ax^2+bx+c

它的工作方式是匹配\D,然后捕获后续的\D。然后每次发现2个字符时,第二个字符必须是以前匹配的字符(\D\1?)。

Live preview

如果你想事先拥有像2+这样的东西。然后就变得更棘手了:

代码语言:javascript
运行
复制
^(?:\d+[+\-*\/^](?:\d+[+\-*\/^])*)?\D(\D)(?:[+\-*\/^](?:\d+\1?|\D\1?))*$

它将匹配输入,如下所示:

代码语言:javascript
运行
复制
ax
ax+bx+x
ay+ay+y
ax^2+bx+c
2+ax
2+ax+bx
2-1+ax+bx

Live preview

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

代码语言:javascript
运行
复制
^(?:\d+(?:\.\d+)?[+\-*\/^](?:\d+(?:\.\d+)?[+\-*\/^])*)?\D(\D)(?:[+\-*\/^](?:\d+(?:\.\d+)?\1?|\D\1?))*$

请注意,这并没有考虑到白空间,因此如果需要的话,您必须在其中撒几个\s*

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43126768

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档