当关键字出现在模式后面时,python 分割字符串

标签 python regex

我有一个主机名,例如

ab-test-db-dev.0002-colo1-vm234.abc.domain.com

(是的,内部没有遵循主机名约定。)

我试图将此主机名拆分为

ab-test-db-dev.0002-colo1-vm234

模式用“.”分隔,但前提是该点后面没有其他特殊字符。

我试过了

pattern = domain.split(".")

但只需要直到

ab-test-db-dev and not ab-test-db-dev.0002-colo1-vm234

作为第一个元素。

实现这一目标的最佳方法是什么?

最佳答案

您可以删除第一部分,直到不再有破折号为止;这将是要从主机名中删除的域名:

hostname = domain
while '-' in domain:
    domain = domain.partition('.')[-1]
hostname = hostname[:-len(domain) - 1]

或者相反,如果最后一部分包含破折号,则删除它,用str.rpartition() :

hostname = domain
while True:
    first, _, end = hostname.rpartition('.')
    if '-' in end:
        break
    hostname = first

使用正则表达式查找仅包含字母和点的任何部分:

import re

hostname = re.sub(r'\.[a-z.]+$', '', domain)

演示:

>>> domain = 'ab-test-db-dev.0002-colo1-vm234.abc.domain.com'
>>> hostname = domain
>>> while '-' in domain:
...     domain = domain.partition('.')[-1]
... 
>>> hostname[:-len(domain) - 1]
'ab-test-db-dev.0002-colo1-vm234'
>>> domain = 'ab-test-db-dev.0002-colo1-vm234.abc.domain.com'
>>> hostname = domain
>>> while True:
...     first, _, end = hostname.rpartition('.')
...     if '-' in end:
...         break
...     hostname = first
... 
>>> hostname
'ab-test-db-dev.0002-colo1-vm234'
>>> import re
>>> re.sub(r'\.[a-z.]+$', '', domain)
'ab-test-db-dev.0002-colo1-vm234'

关于当关键字出现在模式后面时,python 分割字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27721841/

相关文章:

Python:搜索 dict 的值来查找正则表达式

regex - 在带有路由器中间件的 Express 应用程序中使用正则表达式

java - 如何反转整个句子的字符大小写?

php - 使用 PHP 验证国际电话号码

regex - 使用 RegEx 检查空格

python - 加载包含自然键的 Django Fixture

python - 为什么 Julia 不能超集 python?

javascript - 使用正则表达式查找第一个元音 (Javascript)

python - 通过聚合 RPC 调用来加速 GAE-Py 中的模板

Python:从 Web 界面运行时导入其他 python 文件