python - 我可以使用什么正则表达式从该字符串中捕获组?

标签 python regex

假设以下字符串:

  • A01B100
  • A01.B100
  • A01
  • A01................................B100(A 和 B 之间的任何值)

问题是,数字应该是 \d+,并且在所有字符串中,A 将始终存在,而 B 可能不存在。 A 后面将始终跟一个或多个数字,如果存在,B 也将如此。我可以使用什么正则表达式来捕获 A 和 B 的数字?

我有以下正则表达式:

(A(\d+)).*?(B?(\d+)?)

但这只适用于第一种和第三种情况。

最佳答案

  • A 必须在 B 之前吗?假设是。
  • B 可以出现多次吗?假设没有。
  • B 是否可以作为 B 号码组的一部分出现?假设没有。

然后,

A\d+.*?(B\d+)?

使用惰性 .*?或

A\d+[^B]*(B\d+)?

效率更高,但要求 B 是单个字符。

编辑:经过进一步思考,我以一种不太完美的方式将模式括起来。以下模式应该需要更少的假设:

A\d+(.*?B\d+)?
a\d+([^B]*B\d+)?

关于python - 我可以使用什么正则表达式从该字符串中捕获组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1301257/

相关文章:

javascript - 这个主要的测试功能是如何工作的?

regex - 删除包含哈希字符的日志行

python - 如何替换多元函数中一个变量的值?

python - 如何配置 uwsgi 以使用特定版本的 python?

python - LSTM 训练期间持续损失 - PyTorch

python - 使用 GUI 分发计算机应用程序 (Python)

regex - 正则表达式适用于regex101.com,但不适用于prod

java - 为什么 String.replaceAll (".*", "REPLACEMENT") 在 Java 8 中会出现意外行为?

Python Regex 从字符串中识别 IPv4 地址

python - 了解递归函数中内置于变量赋值中的多个递归调用