我正在开发一个函数,它保留单词内部的符号(单词可以由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())
-这也会删除单词内部的标点符号
您可以匹配任何不同于
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。(不要忘记
i
和g
标志)。你知道吗[编辑]因为您还希望匹配单词外的
_
好的,如果你想让下划线匹配,也按原样更新:
(?<![a-z_])[a-z_][^\s]*[a-z_](?![a-z_])|(?<= )[a-z_](?= )
。你知道吗看到它在这里工作了吗:https://regex101.com/r/EAEelq/4
相关问题 更多 >
编程相关推荐