从字母数字字符串截断

2024-04-28 16:46:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图找到第一个字母数字子字符串,并从匹配的字母数字字符串开始截断字符串

test=k8s-configuration-int-mbus_config-int-mbus-deployment-db9c64cd-n4tww_central_6d499584

这里第一个字母数字字符串是-db9c64cd-(也可以是-9dbc64cd-

现在我希望子字符串为k8s-configuration-int-mbus_config-int-mbus-deployment

尝试了两个类似regex的re.sub(r'-[a-z0-9]*-.*', r'', test),但没有成功。有办法做到这一点吗


Tags: 字符串testreconfig字母deployment数字configuration
3条回答

你可以用

rx = r'^.*?(?=-(?:[A-Za-z]+[0-9]|[0-9]+[a-zA-Z])[0-9a-zA-Z]*-)'
text = r'k8s-configuration-int-mbus_config-int-mbus-deployment-db9c64cd-n4tww_central_6d499584'
match = re.search(rx, text)
if match:
    print(match.group())
# => k8s-configuration-int-mbus_config-int-mbus-deployment

this regex demothis Python demo

或者,采用拆分方法:

import re
rx = r'-(?:[A-Za-z]+[0-9]|[0-9]+[a-zA-Z])[0-9a-zA-Z]*-'
text = r'k8s-configuration-int-mbus_config-int-mbus-deployment-db9c64cd-n4tww_central_6d499584'
result = re.split(rx, text, 2)
print(result[0])
# => k8s-configuration-int-mbus_config-int-mbus-deployment

Python demoregex demo

正则表达式详细信息

  • ^-字符串的开头
  • .*?-除换行符以外的任何零个或多个字符,尽可能少
  • (?=-积极前瞻的开始:
    • --a-字符
    • (?:[A-Za-z]+[0-9]|[0-9]+[a-zA-Z])-一个或多个ASCII字母和一个数字,或一个或多个数字和一个ASCII字母
    • [0-9a-zA-Z]*-零个或多个字母数字ASCII字符
    • --a-字符
  • )-前瞻的结束

使用re.sub方法:

>>> import re
>>> test='k8s-configuration-int-mbus_config-int-mbus-deployment-db9c64cd-n4tww_central_6d499584'
>>> print (re.sub(r'(?i)-(?:[a-z]+\d[a-z\d]*|\d+[a-z][a-z\d]*)-.*', '', test))
k8s-configuration-int-mbus_config-int-mbus-deployment

RegEx Demo

正则表达式解释:

  • (?i):启用忽略大小写模式
  • -:匹配连字符
  • (?:[a-z]+\d[a-z\d]*|\d+[a-z][a-z\d]*):匹配字母数字字符串
  • -:匹配连字符
  • .*:匹配字符串的其余部分

-(?:[a-zA-Z]+\d[a-zA-Z\d]\d+[a-zA-Z][a-zA-Z\d])-*

也应该起作用

刚刚增加了资本A-Z

import re
test='k8s-configuration-int-mbus_config-int-mbus-deployment-db9c64cd-n4tww_central_6d499584'
print (re.sub(r'(?i)-(?:[a-zA-Z]+\d[a-zA-Z\d]*|\d+[a-zA-Z][a-zA-Z\d]*)-.*', '', test))
# result 
k8s-configuration-int-mbus_config-int-mbus-deployment

基本上,使用sub,我们提取字符串中不匹配的部分,即抑制匹配的值并仅拾取不匹配的数据

这是一种反向分析

感谢@anubhava

相关问题 更多 >