如果url以.com或.n结尾,则提取其初始部分

2024-05-08 14:42:42 发布

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

我有以下输入字符串

string = ['sql ddlsql144.internal.ecnahcdroffilc.net',
          'fra-sql-03.internal.ecnahcdroffilc.net bro',
          'esc-cca3cdr-12.internal.ecnahcdroffilc.com',
          'au-per-06a-stwp-01.per.asia.ecnahcdroffilc.com',\
          'http://go.fotrscomi.com',
          'http //go.fotrscomi.com',
          'fotrscomi.windows.computer',
          'printers-03.internal.clif 10.51.59.10 roalswinds.oionr']

我希望结果是

['ddlsql144', 
 'fra-sql-03', 
 'esc-cca3cdr-12', 
 'au-per-06a-stwp-01'
 '10.51.59.10' ]

匹配模式的条件是:

  • 任何以.com.net结尾的url都应匹配,但不应以https://http://http //开头
  • 只有url的第一部分必须返回
  • 如果有任何IP地址出现在字符串中

我试过了

expression = "(\w[-.a-z0-9]*)..?(?=org|net|com)"
# to extract the whole url
urls = re.findall(expression, str(string))

得到我用过的第一部分

re.findall('(^\w.+?)\.',str(urls))

但这并没有给我预期的结果。你知道吗


Tags: 字符串comhttpurlsqlstringnetinternal
1条回答
网友
1楼 · 发布于 2024-05-08 14:42:42

具有re.search函数和特定正则表达式模式的扩展解决方案:

import re

items = ['sql ddlsql144.internal.ecnahcdroffilc.net','fra-sql-03.internal.ecnahcdroffilc.net bro',
          'esc-cca3cdr-12.internal.ecnahcdroffilc.com', 'au-per-06a-stwp-01.per.asia.ecnahcdroffilc.com',
          'http://go.fotrscomi.com', 'http //go.fotrscomi.com',
          'fotrscomi.windows.computer', 'printers-03.internal.clif 10.51.59.10 roalswinds.oionr'
         ]

result = []
pat = re.compile(r'(http )?([^\s.]+)[^\s]+\.(?:org|net|com)\b|\b((?:[0-9]{1,3}\.){3}[0-9]{1,3})\b')
for i in items:
    m = pat.search(i)
    if m:
        if not m.group(1) and m.group(2) and not m.group(2).startswith('http'):
            result.append(m.group(2))
        elif m.group(3):
            result.append(m.group(3))

print(result)

输出:

['ddlsql144', 'fra-sql-03', 'esc-cca3cdr-12', 'au-per-06a-stwp-01', '10.51.59.10']

相关问题 更多 >