【问题标题】:Regex pattern to match the string匹配字符串的正则表达式模式
【发布时间】:2015-11-14 21:36:41
【问题描述】:

匹配以 abc-def-xyz 开头并以任何结尾的字符串的正则表达式模式是什么??

【问题讨论】:

  • 当你尝试它时会发生什么? samplemethod(filter=r'abc-def')
  • 我猜它没有采用那种模式,因为我没有得到任何输出
  • 也许该模式与目标字符串中的任何内容都不匹配?功能的实现是什么?可以发在这里吗?
  • 那么 abc-def 的正则表达式是什么
  • 从字面上看,模式是abc-def。提供有关您尝试匹配的数据的更多详细信息。

标签: python regex python-2.7


【解决方案1】:

更新

由于您只想匹配以abc-def 开头的主机名,您可以简单地使用str.startswith()

hosts = ['abc-def.1.desktop.rul.com',
         'abc-def.2.desktop.rul.com',
         'abc-def.3.desktop.rul.com',
         'abc-def.4.desktop.rul.com',
         'abc-def.44.desktop.rul.com',
         'abc-def.100.desktop.rul.com',
         'qwe-rty.100.desktop.rul.com',
         'z.100.desktop.rul.com',
         '192.168.1.10',
         'abc-def.100abc.desktop.rul.com']
filtered_hosts = [host for host in hosts if host.startswith('abc-def')]
print filtered_hosts

输出

['abc-def.1.desktop.rul.com', 'abc-def.2.desktop.rul.com', 'abc-def.3.desktop.rul.com', 'abc-def.4. desktop.rul.com','abc-def.44.desktop.rul.com','abc-def.100.desktop.rul.com','abc-def.100abc.desktop.rul.com']

原始正则表达式解决方案如下。


假设您的数据是一个主机名列表,例如:

hosts = ['abc-def.1.desktop.rul.com',
         'abc-def.2.desktop.rul.com',
         'abc-def.3.desktop.rul.com',
         'abc-def.4.desktop.rul.com',
         'abc-def.44.desktop.rul.com',
         'abc-def.100.desktop.rul.com',
         'qwe-rty.100.desktop.rul.com',
         'z.100.desktop.rul.com',
         '192.168.1.10',
         'abc-def.100abc.desktop.rul.com']

import re

pattern = re.compile(r'abc-def\.\d+\.')
filtered_hosts = [host for host in hosts if pattern.match(host)]
print filtered_hosts

输出

['abc-def.1.desktop.rul.com', 'abc-def.2.desktop.rul.com', 'abc-def.3.desktop.rul.com', 'abc-def.4. desktop.rul.com','abc-def.44.desktop.rul.com','abc-def.100.desktop.rul.com']

正则表达式模式表示匹配以abc-def. 开头的任何行,后跟一个或多个数字,后跟一个点。

如果您想匹配更通用的模式,例如任何 3 个小写字母后跟 - 和另外 3 个小写字母的序列,您可以这样做:

pattern = re.compile(r'[a-z]{3}-[a-z]{3}\.\d+\.')

现在输出还包括'qwe-rty.100.desktop.rul.com'

【讨论】:

  • 谢谢。但是您提供的正则表达式..您可以将其限制为 abc-def 并重新发布。因为该列表还包含主机如 abc-def.somevalue.desktop.rul.com、abc-def.somevalue1-somevalue2.desktop.rul.com、abc-def.somevalue-somevalue1-somevalue2.desktop.rul.com
  • 基本上我只想要一个正则表达式模式,它可以获取以 abc-def 开头的主机名
  • 很抱歉。对模式有充分的解释,您可以自己更改它。这很明显。
  • 而且您不需要正则表达式。只需使用str.startswith()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-16
  • 2021-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多