为什么我的正则表达式代码要替换一些字符串,而不是其他字符串?

2024-09-23 06:27:37 发布

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

我有学术论文的摘要。有时,摘要会包含“本文探讨的目的……”或“设计/方法/途径我们研究的设计……”这样的行。我称之为“目的”和“设计/方法/方法”标签。我希望字符串如下所示:[label][:][space]。例如:“目的:本文探讨……”

当原始字符串在标签和文本之间有一个空格时,下面的代码会得到我想要的结果(例如,“本文探讨的目的…”。但我不明白为什么它在没有空间的情况下也不起作用。我可以问一下,我需要对下面的代码做些什么,以便标签按我想要的方式格式化,即使原始文本在标签和文本之间没有空格?注意,我导入了re.sub

def clean_abstract(my_abstract):
    labels = ['Purpose', 'Design/methodology/approach', 'Methodology/Approach', 'Methodology/approach' 'Findings', 'Research limitations/implications', 'Research limitations/Implications' 'Practical implications', 'Social implications', 'Originality/value']
    for i in labels:
        cleaned_abstract = sub(i, i + ': ', cleaned_abstract)
    return cleaned_abstract

Tags: 方法字符串代码文本目的abstractlabels标签
1条回答
网友
1楼 · 发布于 2024-09-23 06:27:37

代码

See code in use here

labels = ['Purpose', 'Design/methodology/approach', 'Methodology/Approach', 'Methodology/approach' 'Findings', 'Research limitations/implications', 'Research limitations/Implications' 'Practical implications', 'Social implications', 'Originality/value']
strings = ['PurposeThis article explores....', 'Design/methodology/approachThe design of our study....']
print [l + ": " + s.split(l)[1].lstrip() for l in labels for s in strings if l in s]

结果

[
    'Purpose: This article explores....',
    'Design/methodology/approach: The design of our study....'
]

解释

使用来自thispost的逻辑

  • print []返回结果列表
  • l + ": " + s.split(l)[1].lstrip()创建字符串
    • l解释如下
    • :字面意思
    • s.split(l).lstrip()l上拆分s并删除字符串左侧的所有空白
  • for l in labels循环labelsl设置为每次迭代时的值
  • for s in strings循环stringss设置为每次迭代时的值
  • if l in s如果在s中发现l

相关问题 更多 >