我正在尝试提出一个正则表达式来删除所有包含非单词字符的单词。
因此,如果它包含冒号、逗号、数字、括号等,则将其从行中删除,不仅是字符,还有单词。到目前为止我有这个。
$wordline = s/\s.*\W.*?\s//g;
不必是完美的,所以用破折号和撇号删除字符串是可以的。
$wordline = join(" ", grep(/^\w+$/, split(/\s+/, $wordline)));
s/\w*([^\w\s]|\d)+\w* ?//g;
s/(?<!\S)(?![A-Za-z]+(?:\s|$))\S+(?!\S)//g
在 regex-land 中,“单词字符”是字母、数字或下划线 ( [A-Za-z0-9_]
)。听起来你只是用它来表示字母,所以\w
对\W
你没有任何好处。我的正则表达式匹配:
一堆非空白字符:\S+
前面没有:(?<!\S)
或后面:(?!\S)
非空白字符
除非所有字符都是字母:(?![A-Za-z]+(?:\s|$))
这将留下它删除的单词周围的所有空格。正确处理这些问题比您想象的要复杂一些。在单独的步骤中执行起来要容易得多,例如:
s/^ +| +(?= |$)//g