我正在尝试使用正则表达式删除包含非单词字符的所有单词。
因此,如果它包含冒号,逗号,数字,括号等,则将其从行中删除,而不仅仅是字符而是单词。到目前为止,我有这个。
$wordline = s/\s.*\W.*?\s//g;
不一定要完美,所以用短划线和撇号删除字符串是可以的。
答案 0 :(得分:3)
$wordline = join(" ", grep(/^\w+$/, split(/\s+/, $wordline)));
答案 1 :(得分:2)
s/\w*([^\w\s]|\d)+\w* ?//g;
答案 2 :(得分:2)
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