为什么我的RegEx代码替换了一些字符串,而不是其他字符串?

时间:2017-12-08 22:08:30

标签: python regex

我有学术文章的摘要。有时,摘要将包含类似"目的的文章。本文探讨了......"或"设计/方法/方法我们研究的设计......"。我称之为"目的"和"设计/方法/方法"标签。我希望字符串看起来像这样:[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

1 个答案:

答案 0 :(得分:0)

代码

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....'
]

说明

使用this帖子中的逻辑。

  • print []返回结果列表
  • l + ": " + s.split(l)[1].lstrip()创建我们的字符串
    • l解释如下
    • :字面意思
    • s.split(l).lstrip()s上拆分l并删除字符串左侧的任何空格
  • for l in labelslabels设置l的次数设置为每次迭代时的值
  • for s in stringsstrings设置s的次数设置为每次迭代时的值
  • if l in s如果在l
  • 中找到s