【发布时间】:2021-07-19 17:17:01
【问题描述】:
是否可以在 Python 3 中从右到左(仅第一次出现)拆分短语(可能超过一个单词)上的字符串?
目前我可以根据短语列表拆分字符串,但我有一个极端情况,如果字符串中出现多个指定短语,那么它会同时拆分。
问题
给定一个包含以下内容的示例 CSV:
| SENTENCES | |
|---|---|
| THIS IS SENTENCE THREE | 1 |
| THIS IS SENTENCE TWO | 2 |
| I CONTAIN ONE BUT ALSO TWO | 3 |
我的代码打开一个 CSV,循环遍历每一行,然后拆分指定的短语:
import re
import csv
def split_phrase(string):
phrases = ['ONE', 'TWO', 'THREE']
print(f'Raw: {string}')
split_phrase = '' # Only needed for testing purposes to prevent error on output
for phrase in phrases:
if phrase in string:
list = re.split(f'\\b({phrase})\\b', string)
print(f'Split: {list}')
sentence = list[0]
split_phrase = list[1]
print(f'Phrase: {split_phrase}')
return sentence, split_phrase
input_dir = 'input1/'
output_dir = 'output1/'
filename = 'demo.csv'
with open(input_dir + filename, 'r') as input_csv:
csv_reader = csv.reader(input_csv)
data = list(csv_reader)
input_csv.close()
for row in data[1:]: # Ignore the header row
sentence = row[0] # First column
sentence = split_phrase(sentence) # Split out specified phrase
我得到以下输出:
$ python3 demo.py
Raw: THIS IS SENTENCE THREE
Split: ['THIS IS SENTENCE ', 'THREE', '']
Phrase: THREE
Raw: THIS IS SENTENCE TWO
Split: ['THIS IS SENTENCE ', 'TWO', '']
Phrase: TWO
Raw: I CONTAIN ONE BUT ALSO TWO
Split: ['I CONTAIN ', 'ONE', ' BUT ALSO TWO']
Phrase: ONE
Split: ['I CONTAIN ONE BUT ALSO ', 'TWO', '']
Phrase: TWO
注意:最后一个句子由 for 循环处理两次,因为它包含短语列表中的两个短语。
期望的结果
我知道在列出的要拆分的短语中,它始终是右侧的最后一个。所以我想只从右到左抓取第一个匹配项。
注意:“短语”可以包含一个或多个单词。
这可能吗?如果是这样,我该如何实现?
【问题讨论】:
-
根据您的更新
words => phrases我已经编辑了我的答案。 -
我不清楚,但对于最后一个例句,你想要 both 拆分(ONE 和 TWO)还是只拆分 TWO,因为那是最右边的?
-
@JustinEzequiel 只是拆分两个,因为它是最右边的。
-
那么下面的任何答案都应该适合你。
标签: python python-3.x split