首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在句子列表中如何在单词和括号之间创建一个空格

在句子列表中如何在单词和括号之间创建一个空格
EN

Stack Overflow用户
提问于 2020-05-14 16:52:02
回答 3查看 255关注 0票数 2

在下面的列表中,实际上有两个哑弹。但由于第二句与第二句在空间上的差异,将其视为独特的句子。

通过使用Python正则表达式,如何在单词之间创建加法空间。(例如:第一项)“美国(美国)”,应改为“美国(美国)”(与第二项相同)

代码语言:javascript
复制
listx = 
['United States(US)',
 'United States (US)',
 'New York(NY)',
 'New York (NY)']

预期输出列表为

代码语言:javascript
复制
['United States (US)',
 'United States (US)',
 'New York (NY)',
 'New York (NY)']

实际上,我正在尝试从清单中删除重复的句子,并且认为这是一种先使句子相似的方法。请建议一下。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-05-14 16:57:13

您可以搜索紧跟在括号后面的字母。

代码语言:javascript
复制
>>> [re.sub(r'(\w)\(', r'\1 (', i) for i in listx]
['United States (US)',
 'United States (US)',
 'New York (NY)',
 'New York (NY)']

若要删除重复项,可以从此生成器表达式中创建一个set

代码语言:javascript
复制
>>> set(re.sub(r'(\w)\(', r'\1 (', i) for i in listx)
{'United States (US)', 'New York (NY)'}
票数 3
EN

Stack Overflow用户

发布于 2020-05-14 17:01:35

你可以试试这个。您可以在这里使用。

代码语言:javascript
复制
listx = ['United States(US)', 'United States (US)', 'New York(NY)', 'New York (NY)']

[re.sub(r'.(\(.*\))',r' \1',i) for i in listx]
# ['United State (US)', 'United States (US)', 'New Yor (NY)', 'New York (NY)']

Regex模式解释:

  • .以匹配组bracket
  • \(的任何character
  • (开始匹配(
  • .* match greedily.
  • ' \1'子匹配组与匹配的group.
  • regex live demo

空间

票数 0
EN

Stack Overflow用户

发布于 2020-05-14 17:03:49

你能做到的

代码语言:javascript
复制
    new_listx = ["{} {}".format(re.match('(.*)(\(.*\))', i).group(1).rstrip() ,re.match('(.*)(\(.*\))', i).group(2)) for i in listx]
    print(new_listx)

输出

代码语言:javascript
复制
['United States (US)', 'United States (US)', 'New York (NY)', 'New York (NY)']

正则表达式将文本分割为两个组,一个组在()之前,第二个组在()之前,然后它从第一个组的右边修剪空格。

那你就可以

代码语言:javascript
复制
print(set(new_listx))

你会得到一个唯一的值集。

代码语言:javascript
复制
{'New York (NY)', 'United States (US)'}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61802934

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档