【问题标题】:Regex to find text after linebreak in URL正则表达式在 URL 中换行后查找文本
【发布时间】:2018-04-06 13:21:51
【问题描述】:

我想使用正则表达式来获取字符串的一部分。我想删除 kerberos 及其之后的所有内容并获取 Username

import re
text = 'Kerberos://DME.DMS.WORLD.DMSHEN/Username'
reg1 = re.compile(r"^((Kerberos?|ftp):\/)?\/?([^:\/\s]+)((\/\w+)*\/)([\w\-\.]+[^#?\s]+)(.*)?(#[\w\-]+)?$",text)
print(reg1)

输出 Username

我是正则表达式的新手并尝试过这个正则表达式,但它似乎不起作用

【问题讨论】:

  • 只需text[text.rindex('/')+1:] 就足够了。没有?
  • 你的字符串可能的内容是什么?用户名总是在最后一个斜杠后面吗?
  • 用户名只是一个变量。这就是为什么我要删除 / 之前的所有内容

标签: python regex


【解决方案1】:

您的正则表达式工作得很好,但我假设您想让大多数组不被捕获(您可以通过在每个组中添加 ?: 来做到这一点。

它将为您提供以下信息:

re.match(r"^(?:(?:Kerberos?|ftp):\/)?\/?(?:[^:\/\s]+)(?:(\/\w+)*\/)(?P<u>[\w\-\.]+[^#?\s]+)(?:.*)?(?:#[\w\-]+)?$",t).group('u')

另外,为了将来参考,尝试使用https://regex101.com/,它有一个简单的方法来测试你的正则表达式+每个部分的解释。

【讨论】:

  • 但这将 kerberos 作为输出而不是用户名
  • 你是对的,更新了我的答案。这可能会更短,但它可以工作
【解决方案2】:

这个简单的怎么样:

import re
text = 'Kerberos://DME.DMS.WORLD.DMSHEN/Username'
reg1 = re.findall(r"//.*/(.*)", text)
print(''.join(reg1))
# Username

【讨论】:

  • 只想要没有 [' '] 的用户名
【解决方案3】:

如果你愿意,你可以使用 split 代替正则表达式

text = 'Kerberos://DME.DMS.WORLD.DMSHEN/Username'
m = text.split('/')[-1]
print m

【讨论】:

    猜你喜欢
    • 2011-07-24
    • 1970-01-01
    • 2014-01-30
    • 1970-01-01
    • 1970-01-01
    • 2016-12-31
    • 1970-01-01
    • 1970-01-01
    • 2017-10-22
    相关资源
    最近更新 更多