在python中区分分隔符[[]]和[[]]之间的单词

时间:2018-03-23 17:09:06

标签: python string

我想在文本中找到分隔符[[]]之间的单个和复数单词,例如:

"I have a red [[pen]], two blue [[pen]]s, two black [[pencil]]s and a green [[pencil]]"

应该是

['pen', 'pen', 'pencil', 'pencil']

和另一个列表显示哪一个是单一的,例如0表示单个,1表示复数:

[0, 1, 1, 0]

我知道使用以下代码我可以提取以前的列表:

re.findall(r'\[\[(.*?)\]\]', str)

但是我无法找到一种方法来产生第二个数组或任何其他方法来识别哪个是单个或复数。有什么想法吗?

3 个答案:

答案 0 :(得分:3)

一种选择是更改正则表达式以包含s?的第二个捕获组。

s = "I have a red [[pen]], two blue [[pen]]s, two black [[pencil]]s and a green [[pencil]]"
pat = r"\[\[(.*?)\]\](s?)"
matches = re.findall(pat, s)
print(matches)
#[('pen', ''), ('pen', 's'), ('pencil', 's'), ('pencil', '')]

如您所见,matches中的元素是元组。现在只需使用列表推导并检查每个元组的第二个元素's'

myList = [1 if m[1] else 0 for m in matches]
print(myList)
#[0, 1, 1, 0]

显然,这只适用于以's'结尾的复数形式。

答案 1 :(得分:1)

您可以在括号外查看以找到多个值:

import re
s= "I have a red [[pen]], two blue [[pen]]s, two black [[pencil]]s and a green [[pencil]]"
final_results = [[i[:-2], 0] if not i.endswith('s') else [i[:-3], 1] for i in re.findall('(?<=\[\[)[a-zA-Z]+\]\]s*', s)]
words = [a for a, _ in final_results]
indices = [b for _, b in final_results]

输出:

['pen', 'pen', 'pencil', 'pencil']
[0, 1, 1, 0]

答案 2 :(得分:0)

一个选项:

[int(i.startswith('s')) for i in word_string.split(']]') ][1:]给出了从每个$comments->forAll(function($key, $entity) { $this->em->remove($entity); return true; }); 到下一个listtview.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int position, long l){ String selected = (String) adapterView.getItemAtPosition(i); Toast.makeText(getApplicationContext(),"This is"+selected,Toast.LENGTH_LONG).show(); } }); 的字符串部分列表。

[albumImageview sd_setImageWithURL:[NSURL URLWithString:@"http://akns-images.eonline.com/eol_images/Entire_Site/2018223/rs_600x600-180323073745-600-michael-davidson-fdny-032218.jpg?fit=around%7C450:350&crop=450:350;center,top&output-quality=100"] placeholderImage:[UIImage new] completed:^(UIImage * _Nullable image, NSError * _Nullable error, SDImageCacheType cacheType, NSURL * _Nullable imageURL) { albumImageview.image = image; }]; 给出一个布尔值,指示部分//assets-cdn.ziggeo.com/v2-stable/ziggeo.js 是否以s开头。

如果它以's'开头,那么将其转换为new ZiggeoApi.V2.Application({ token: {TOKEN}, language: {LANGUAGE}, webrtc_streaming: true }); 会给出1,如果不是,则为0。

ZiggeoApi.Events.on("system_ready", function() { 提供{{1}}和{{1}}的列表,指示每个{{1}}后的每个部分是否以's'开头。因为,给定一个特定的单词,你想知道下一部分是否以's'开头,你需要将其转换为一个。这可以使用{{1}}完成。

所以,作为一个单行:

{{1}}

这假设单词是复数的,当且仅当它们以's'结尾时。