【问题标题】:Execute if else condition parallelly over list of strings在字符串列表上并行执行 if else 条件
【发布时间】:2021-08-10 17:47:26
【问题描述】:

我是 python 新手,在获得正确的输出时遇到了问题。我有一个字符串列表:

list_string=[
    '!DOC <p>The course starts next Sunday</t><div>',
    "!DOC <p>class='default'<d>I don't wash the dishes</span></t>",
    'When does the train usually leave'
]

我想要的输出为:

Output expected: [['The course starts next Sunday'], ["I don't wash the dishes"], 'When does the train usually leave']

我所做的是:

import re
subtring='!DOC'
output=[]
for i in string:
    if subtring in i:
        text=re.findall("<p>(.*?)</t>",i, re.DOTALL)
        output.append(text)
    elif subtring in i:
        text=re.findall("<d>(.*?)</span>",i, re.DOTALL)
        output.append(text)
    else:
        output.append(i)
print (output)

[['The course starts next Sunday'], ["class='default'<d>I don't wash the dishes</span>"], 'When does the train usually leave']

任何人都可以提出正确的方法吗?

【问题讨论】:

  • 为什么你有两个subtring in i 测试?第二个永远不会成功。
  • 为什么要使用第二个正则表达式而不是第一个来处理第二个字符串?
  • 在同一个 if 块中执行两者。
  • 我不明白你的逻辑。第二个字符串匹配两个正则表达式。为什么输出应该包含来自第二个findall 而不是第一个的结果?
  • 如何知道从结果中排除class='default'

标签: arrays python-3.x regex


【解决方案1】:

似乎第二条规则胜过第一条,所以如果第二条规则匹配,请使用它,否则尝试第一条规则退回到返回给你的内容。

一个接近你现在的解决方案可能是:

import re

list_string =[
    '!DOC <p>The course starts next Sunday</t><div>',
    "!DOC <p>class='default'<d>I don't wash the dishes</span></t>",
    'When does the train usually leave'
]

output=[]
for line in list_string:
    retval = re.findall("<d>(.*?)</span>", line,  re.DOTALL)
    if retval:
        output.append(retval[0])
        continue

    retval = re.findall("<p>(.*?)</t>", line,  re.DOTALL)
    if retval:
        output.append(retval[0])
        continue

    output.append(line)

print (output)

虽然如果是我,我可能会用一个带理解的小函数:

import re

def pick_out_text(text):
    retval = re.findall("<d>(.*?)</span>", text,  re.DOTALL)
    if retval: return retval[0]

    retval = re.findall("<p>(.*?)</t>", text, re.DOTALL)
    if retval: return retval[0]

    return text

list_string =[
    '!DOC <p>The course starts next Sunday</t><div>',
    "!DOC <p>class='default'<d>I don't wash the dishes</span></t>",
    'When does the train usually leave'
]

output = [pick_out_text(line) for line in list_string]

print(output)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-21
    • 1970-01-01
    • 1970-01-01
    • 2015-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-12
    相关资源
    最近更新 更多