在某些单词后分割或分割字符串

时间:2018-11-19 12:28:44

标签: python regex string split

首先让我说我已经在Google上广泛搜索了好几个小时,然后再问这里。如果我选​​择在这里发帖,我非常绝望。

我有一些字符串,格式如下(近似):

"firstword text ONE lastword"
"firstword text TWO lastword"

我需要在text之后,'firstword''ONE'之前提取'TWO'

因此上述字符串的输出必须为:

"text"

如何拆分或分割字符串,以便可以:

  • 删除第一个单词(我已经知道如何使用str.split('')做到这一点)
  • 保留“ ONE”或“ TWO”中的任何一个之前的文本。 (我认为它应该看起来像str.split('ONE'| 'TWO'),但这显然行不通,而且我还没有找到 一个解决方案。

如果可能的话,我想用split()partition()解决它,但是正则表达式也可以。

感谢您的帮助,如果这是一个愚蠢的问题,请对不起。

5 个答案:

答案 0 :(得分:4)

您可以使用此正则表达式,进行正向查找和正向查找,

(?<=firstword)

Demo

说明:

  • \s*->积极向后看,以确保匹配的文本后跟第一个单词
  • (.*?)->吃掉任何空白
  • \s*->捕获您想要的数据
  • (?=ONE|TWO)->吃掉任何空白
  • node_modules->前瞻,以确保匹配的文本后跟一个或两个

答案 1 :(得分:1)

使用空格将其拆分时,会列出所有单词,然后您可以选择想要的单词:

s = "firstword text TWO lastword"
l = s.split(" ") # l = ["firstword" , "text" , "TWO" , "lastword"]
print l[1] # l[1] = "text"

s = "firstword text TWO lastword"
print s.split(" ")[1]

答案 2 :(得分:1)

尝试一下

str_list = ["firstword text ONE lastword","firstword text TWO lastword","any text u entered before firstword text ONE","firstword text TWO any text After"]
end_key_lst = ['ONE','TWO']
print map(lambda x:x.split('firstword')[-1].strip(),[''.join(val.split(end_key)[:-1]) for val in str_list for i,end_key in enumerate(end_key_lst) if end_key in val.split()])

Result:['text', 'text', 'text', 'text']

我该怎么做: 可能您有许多这样的字符串,所以我将它们保留在列表中,并在一个列表中排列我们的结束键,例如ONE,TWO。 我使用列表压缩和Map函数来获取所需的目标列表。

答案 3 :(得分:1)

您可以使用正则表达式,例如:

import re
string = "firstword text TWO lastword"
re.search('firstword\s+(\w+)\s+[ONE|TWO]', string).group(1)
'text'

答案 4 :(得分:1)

实际上,不需要使用正则表达式。您可以将所需的分隔符存储到列表中,然后检查它们是否存在。

orig_text = "firstword text ONE lastword"

first_separator = "firstword"
#Place all "end words" here
last_separators = ["ONE", "TWO"]

output = []

#Splitting the original text into list
orig_text = orig_text.split(" ")

#Checking if there's the "firstword" just in case
if first_separator in orig_text:
    #Here we check if there's "ONE" or "TWO" in the text
    for i in last_separators:
        if i in orig_text:
            #taking everything between "firstword" and "ONE"/"TWO"
            output = orig_text[orig_text.index(first_separator)+1 : orig_text.index(i)]
            break

#Converting to string
output = " ".join(output)

print(output)

这是输出示例:

"firstword text TWO lastword" -> "text"
"firstword hello world ONE" -> "hello world"
"first text ONE" -> ""
"firstword text" -> ""