要使用空格替换标点符号,我使用:
import re
sentence = ...
output = re.sub(r'[^\w\s]', ' ', sentence)
我有两个问题:
我想将其更改为允许用连字符分隔的双字:例如"double-barreled"
应该保留"double-barreled"
而不是"double barreled"
。实施这一变化的最快方式是什么
稍后,我想用空格替换任何不包含字母或数字的单词,也考虑使用双字。例如:
"Tokyo2020"
>" "
"covid-19"
>"covid-19"
"cov!d-19"
>" "
"Oompa-L00mpa"
>" "
有没有聪明的方法用正则表达式来实现这一点
Q1:
这个正则表达式
[^\P{P}-]+
捕获除破折号以外的所有标点,并且\B-\B
捕获不被单词边界包围的破折号。您可以使用这两个正则表达式的组合来替换标点符号,但dashbes绑定两个类似这样的单词除外Q2:
如果破折号前的第一个单词不包含数字,则此正则表达式可以捕获场景
您可以使用负前瞻来断言单词不只是由数字或单词字符组成,而不是由数字和用连字符分隔的部分组成
(?<!\S)
左边的空白边界(?!
负前瞻(?:\d+|[^\W\d_]+)
匹配没有数字的数字或单词字符和_
(?:
非捕获组作为一个整体重复-(?:\d+|[^\W\d_]+)
匹配-
和之前的相同模式)*
关闭非捕获组并可选地重复(?!\S)
在右侧断言空白边界)
关闭前瞻\S+
匹配1+非空白字符Regex demoPython demo
输出(其中
[ ]
可以是空格)相关问题 更多 >
编程相关推荐