如何在句子列表中的单词和左括号之间创建空格

Posted

技术标签:

【中文标题】如何在句子列表中的单词和左括号之间创建空格【英文标题】:How to create a SPACE between word and open bracket in list of sentences 【发布时间】:2020-08-31 07:36:11 【问题描述】:

在下面的列表中,实际上有两个骗子。但是由于句子的第二个词和 ( 之间的 SPACE 不同,将它们视为唯一的句子。

通过使用 Python - 正则表达式,如何在单词之间创建附加空间。 (示例:第 1 项)“United States(US)”,应更改为“United States (US)”(与第 2 项相同)

listx = 
['United States(US)',
 'United States (US)',
 'New York(NY)',
 'New York (NY)']

预期输出列表是

['United States (US)',
 'United States (US)',
 'New York (NY)',
 'New York (NY)']

实际上,我正在尝试从列表中消除重复的句子,并认为这是首先使句子相似的方法之一。 请提出建议。

【问题讨论】:

【参考方案1】:

你可以的

    new_listx = [" ".format(re.match('(.*)(\(.*\))', i).group(1).rstrip() ,re.match('(.*)(\(.*\))', i).group(2)) for i in listx]
    print(new_listx)

输出

['United States (US)', 'United States (US)', 'New York (NY)', 'New York (NY)']

正则表达式将文本分成两组,一组在 () 之前,第二组在 () 之后,它从第一组的右侧修剪空间。 那你就可以了

print(set(new_listx))

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

'New York (NY)', 'United States (US)'

【讨论】:

【参考方案2】:

你可以试试这个。你可以在这里使用re.sub

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

正则表达式模式解释:

. 匹配任意字符 ( 组括号开始 \( 匹配 ( .* 贪婪匹配。 ' \1' sub 匹配组,空格匹配组。 regex live demo

【讨论】:

【参考方案3】:

您可以搜索紧跟左括号的字母

>>> [re.sub(r'(\w)\(', r'\1 (', i) for i in listx]
['United States (US)',
 'United States (US)',
 'New York (NY)',
 'New York (NY)']

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

>>> set(re.sub(r'(\w)\(', r'\1 (', i) for i in listx)
'United States (US)', 'New York (NY)'

【讨论】:

以上是关于如何在句子列表中的单词和左括号之间创建空格的主要内容,如果未能解决你的问题,请参考以下文章

给定一个单词之间有多个空格的句子。删除多余的空格,使句子在单词之间只有一个空格[重复]

连接JavaScript句子时如何添加空格[重复]

快乐水题1816. 截断句子

英文单词数量统计

LeetCode2021/12/06-1816. 截断句子

LeetCode2021/12/06-1816. 截断句子