字符串中剥除符号的备选方法

2024-03-29 06:09:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在开发一个函数,它保留单词内部的符号(单词可以由a-zA-Z、0-9和∗组成),但删除单词外部的所有其他符号:

For example: 
Input String - hell_o ? my name _ i's <hel'lo/>
Output - ['hell_o' ,'my', 'name', '_', "i's" ,'hel'lo']

我正在使用的函数:

l = ' '.join(filter(None,(word.strip(punctuation.replace("_","")) for word in input_String.split())))
l = re.sub(r'\s+'," ",l)
t = str.split(l.lower())

我知道这不是最好的,最好的方法!!有人推荐我可以尝试的替代品吗??可能是正则表达式来做这个??你知道吗

  • 我试过使用: 消极环顾四周,向后看:\W+(?!\S*[a-z])|(?<!\S)\W+

  • s.strip(punctuation)

  • re.sub('[^\w]', ' ', doc.strip(' ').lower())-这也会删除单词内部的标点符号


Tags: 函数namerelostringmy符号单词
1条回答
网友
1楼 · 发布于 2024-03-29 06:09:40

您可以匹配任何不同于a-zA-Z, 0-9 and _的字符,如您所提到的,在两个字母之间匹配(?<=[a-z])\W(?=[a-z]),并将其替换为零,以删除它。你知道吗

最后,你会有一个非常危险的算法,例如在I'm fine.And you?句中,如果点后面没有空格,它将以I'm fineAnd you?结束,这可能不是你想要的。你知道吗


[编辑]在您的评论之后。你知道吗

好吧,我误解了你的问题。你知道吗

现在我带来了一个regex,您要选择它'hell_o' ,'my', 'name', "i's" ,'hel'lo'

(?<![a-z])[a-z][^\s]*[a-z](?![a-z])。你知道吗

你可以看到它在这里工作:https://regex101.com/r/EAEelq/3。(不要忘记ig标志)。你知道吗


[编辑]因为您还希望匹配单词外的_

好的,如果你想让下划线匹配,也按原样更新:(?<![a-z_])[a-z_][^\s]*[a-z_](?![a-z_])|(?<= )[a-z_](?= )。你知道吗

看到它在这里工作了吗:https://regex101.com/r/EAEelq/4

相关问题 更多 >