首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当字符串中出现标点符号时,删除额外的空格。

当字符串中出现标点符号时,删除额外的空格。
EN

Stack Overflow用户
提问于 2022-09-20 18:17:27
回答 3查看 50关注 0票数 0

我有一个标记句子的列表,例如:

代码语言:javascript
复制
text = ['Selegiline',
 '-',
 'induced',
 'postural',
 'hypotension',
 'in',
 'Parkinson',
 "'",
 's',
 'disease',
 ':',
 'a',
 'longitudinal',
 'study',
 'on',
 'the',
 'effects',
 'of',
 'drug',
 'withdrawal',
 '.']

我想将这个列表转换成一个字符串,但是当出现像-:这样的标点符号时,我希望删除额外的空间,所以最后的输出如下所示:

代码语言:javascript
复制
Selegiline-induced postural hypotension in Parkinson's disease: a longitudinal study on the effects of drug withdrawal

我尝试将列表分割成相等的块,并检查两个对象对是否是单词,然后使用单个空格;否则,没有空格:

代码语言:javascript
复制
def chunks(xs, n):
    n = max(1, n)
    return (xs[i:i+n] for i in range(0, len(xs), n))
data_first = list(chunks(text, 2))

def check(data):
  second_order = []
  for words in data:
    if all(c.isalpha() for c in words[0]) and all(c.isalpha() for c in words[1]):
      second_order.append(" ".join(words))
    else:
      second_order.append("".join(words))
  return second_order

check(data_first)

但我必须将其迭代到最后一个字(递归解决方案)。有更好的方法吗?

EN

回答 3

Stack Overflow用户

发布于 2022-09-20 18:30:49

一种选择可能是创建标点符号和替换字符串的字典,因为每个标点符号似乎遵循不同的规则(冒号应该保留本身之后的空格,其中破折号不应该保留)。

类似于:

代码语言:javascript
复制
punctdict={' - ':'-',' : ':': '," ' ":"'"}
sentence=' '.join(text)
for k,v in punctdict.items():
    sentence = sentence.replace(k, v)
票数 1
EN

Stack Overflow用户

发布于 2022-09-20 18:52:28

代码语言:javascript
复制
text = ['Selegiline',
 '-',
 'induced',
 'postural',
 'hypotension',
 'in',
 'Parkinson',
 "'",
 's',
 'disease',
 ':',
 'a',
 'longitudinal',
 'study',
 'on',
 'the',
 'effects',
 'of',
 'drug',
 'withdrawal',
 '.']
 
def txt_join(txt):
     ans=""
     for s in txt:
         if(s==".") or (s==":"):
           ans=ans.strip()+s+" "
         elif s=="'" or (s=="-"):
            ans=ans.strip()+s
         else:
            ans=ans+s+" "
             
     return ans

print(txt_join(text))

据我所知,这将给你预期的结果。在这个阿尔法里。它通过文本列表进行规范化循环,并根据标点符号添加空格(根据标点符号必须添加if/elif/ add条件)。

票数 0
EN

Stack Overflow用户

发布于 2022-09-20 18:26:30

你要找的是清单理解。您可以阅读更多关于它的内容,这里,您可以做一个列表理解,然后使用替换模块来替换没有空格的空间,就像您在解决方案中使用附加部分所做的那样。您可能会发现这个解决方案很有用。它使用.strip而不是替换。我总是避免在列表上使用for循环,因为列表理解的复杂性和速度要小得多。这也是我的第一个回答,如果有点混乱的话,很抱歉。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73791051

复制
相关文章

相似问题

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