【问题标题】:Splitting a string to find words between delimiters?拆分字符串以在定界符之间查找单词?
【发布时间】:2022-12-07 01:54:03
【问题描述】:

给定一行看起来像这样: jfdajfjlausername=Bob&djfkaak;jdskjpsasword=12345& 我想返回用户名和密码,在本例中是 Bob 和 12345

我尝试用 & 符号拆分字符串,但不知道如何找到单个单词,然后还尝试了以下代码:

left='password='
right='&'
userleft='username='
for x in file.readlines():
    if 'password=' and 'username=' in x:
        text=str(x)
        #password=(text[text.index(left)+len(left):text.index(right)])
        #username=(text[text.index(userleft)+len(userleft):text.index(useright)])
        

【问题讨论】:

  • 请发布输入的内容,以及完整的可运行程序及其输出(如果有)。
  • @C.Pappy。输入已经显示,显然输出没有用,因为 OP 正在寻求帮助来实现它。

标签: python


【解决方案1】:

使用正则表达式:

import re
for x in file.readlines():
    if 'password=' in x and 'username=' in x:
        text=str(x)
        username = re.findall('username=(w+)',text)
        password = re.findall('password=(w+)',text)

请注意更新后的if 声明。在原版中,if 检查"password=" 是否计算为True,它总是会这样做——因为它不是空字符串。

【讨论】:

    【解决方案2】:

    在不使用正则表达式的情况下,您可以拆分两次:一次在& 上,一次在= 上:

    line = 'jfdajfjlausername=Bob&djfkaak;jdskjpsasword=12345&'
    items = [item.split('=') for item in line.split('&')]
    

    现在您可以提取值:

    for item in items:
        if len(item) == 2:
            if item[0].endswith('password'):
                password = item[1]
            elif item[0].endswith('username'):
                username = item[1]
    

    如果你有一堆你正在寻找的键,比如('username', 'password'),你可以编写一个嵌套循环来构建字典:

    keys = ('username', 'password')
    result = {}
    for item in items:
        if len(item) == 2:
            for k in keys:
                if item[0].endswith(k):
                    result[k] = item[1]
                    break
    

    这使得检查您是否获得了所需的所有值变得容易得多,例如与if len(keys) == len(result): ...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-14
      • 2020-02-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多