如何在UTF文本的段落末尾扫描和删除随机字符

时间:2015-06-29 05:19:06

标签: javascript regex utf

以下是我要过滤的文档(https://gist.github.com/jianbo/2192f8f1d25a422ed6a5

每个段落都以这样的随机字符串结尾Q: U A" j$ w& p 我想删除它们,我的想法是扫描任何与字符匹配的匹配以一个句号开始并以超过3个空格结束。

这就是我所拥有的,但我如何检测前面的句号和三个空格?

示例数据(但请查看GIT text):

  

这么长这应该留下时间的面试,不知道会怎么样:Q:U A" j $ w& p这么长时间,这应该是stady的面试,不知道会怎么样

我的代码

 data.match(/[a-zA-Z~!@#$%^&*()_+{}|\;':",./<>? ]/g).join('')

此输出

"this should stay  : Q: U  A" j$ w& p                   again this should stady"

2 个答案:

答案 0 :(得分:0)

我会尝试在正则表达式中添加特殊字符:

var data = 'yourstring';
data.replace(/[^\w\sñáóí\&\$\"]/gi, '');

答案 1 :(得分:0)

那些看似错误的角色来自U + 3002 Unicode字符&#34; IDEOGRAPHIC FULL STOP。&#34;你没有说出什么是UTF,但它看起来像网络上的内容所以我猜你最有可能下载为UTF-8。

我不知道你正在使用什么样的正则表达式引擎,如果你支持Unicode,那么我就提供了一个非常通用的&#34; perl&#34;命令行解决方案。这个正则表达式不需要16位或32位库;它将在UTF-8文件上以常规字节模式工作:

perl -pe 's/(?=\xE3\x80\x82)(.*\xE3\x80\x82).*/\1/' your_file

第一部分只检查我们是否有U + 3002表意文字完全停止,UTF-8是一个三字节代码点,十六进制值为E3 80 82.如果断言为真(即我们有一个U + 3002),它捕获最多包括U + 3002字符的句号。如果您不想包含句号,只需将右括号从\ x82后移到第一个星号后,即:

s/(?=\xE3\x80\x82)(.*)\xE3\x80\x82.*/\1/

同样,没有提供有关正则表达式引擎/风格或编程语言等的任何细节,这可能需要将匹配件拔出,转义,并替换字符串以便单独调用等,但是我我想我已经给了你足够的指导,希望你能在我的回答中找到价值。