Python:正则表达式,用于从主机名中提取位置



我想从以下可能的主机名中提取位置:

WebEU01, DBUS01a, LBUS

这将适用于前两个示例:

>>> import re
>>> re.search(r'(.*)(w{2})(d{2})([a-b]?)', 'webeu01').group(2)
'eu'
>>> re.search(r'(.*)(w{2})(d{2})([a-b]?)', 'dbus01a').group(2)
'us'

第三个仅在我将带有数字的组设置为可选时才有效:

>>> re.search(r'(.*)(w{2})(d{2})?([a-b]?)', 'lbus').group(2)
'us'

但这打破了另外两个:

>>> re.search(r'(.*)(w{2})(d{2})?([a-b]?)', 'webeu01').groups()
('webeu', '01', None, '')

是否可以使用单个正则表达式执行此操作,或者我是否需要将其一分为二,然后使用类似any()

您可以使用

r'^(.*?)(w{2})(?:(d{2})([ab]?))?$'

查看正则表达式演示

关键是

  • 您需要匹配整个字符串,这意味着您必须在模式周围添加锚点,^$
  • 您需要将d{2}组设置为可选,因此,添加?或使用可选的非捕获组包装它。

  • ^- 字符串的开头
  • (.*?)- 组 1:除换行符字符以外的任何 0+ 字符尽可能少
  • (w{2})- 两个单词字符
  • (?:(d{2})([ab]?))?- 可选的非封盖格罗伊普
    • (d{2})- 第 2 组:任意两位数字
    • ([ab]?)- 第 3 组:可选ab
  • $- 字符串的结尾。

相关内容

  • 没有找到相关文章

最新更新