delphi 去掉字符串中所有的标点符号_[话俾你知]Python使用正则处理字符串技巧(分割、替换)...

    当你遇见了一个问题需要使用正则来处理,这个时候你就有了两个问题。

    我主业是做图像处理,自然语言处理接触不多,正则表达式的研究并不深入,本文只讲述一些小技巧,如果你对正则表达式比较感兴趣,可以去看看有本书好像叫《Python 核心编程》。本文涉及的内容有两方面:你想要根据不止一个字符来分隔字符串;你想要把字符串中几种不同字符过滤掉或者替换成某种特定字符(串)。

    本文给出了一个例子,我从《资治通鉴》中摘了一段话,想要提取其中的文字,过滤掉其中的标点符号。

import retext = "趙王封樂毅於觀津,尊寵之,以警動於燕、齊。燕惠王乃使人讓樂毅," \       "且謝之曰:「將軍過聽,以與寡人有隙,遂捐燕歸趙。將軍自為計則可矣," \       "而亦何以報先王這所以遇將軍之意乎?」樂毅報書曰:「昔伍子胥說聽" \       "於闔閭而吳遠跡至郢;夫差弗是也,賜之鴟夷而浮之江。吳王不寤先論" \       "之可以立功,故沈子胥而不悔;子胥不蚤見主之不同量,是以至於入江" \       "而不化。夫免自立功以明先王之跡,臣之上計也。離毀辱之誹謗,墮先王之名," \       "臣之所大恐也。臨不測之罪,以幸為利,義之所不敢出也。臣聞古之君子," \       "交絕不出惡聲,忠臣去國,不潔其名。臣雖不佞,數奉教於君子矣。" \       "唯君王之留意焉!」於是燕王復以樂毅子閒為昌國君,而樂毅往來復通燕," \       "卒於趙,號曰望諸君。"

c401ac82d07bbcf60a949c0e36f06af2.png

    此处我定义了一些中文标点符号,但是还没穷举所有的符号,如果你遇见了其他的需要自行加进去。这里是将中文符号替换成空格,如果只需要过滤掉的话,re.sub函数第二个参数改成一个空字符串就行了,非常的人性化。

46feb2d4743dac4e6688ae67c9bbd2bc.png

    此处是过滤掉多数非汉字内容,使用了unicode范围来确定是不是汉字,这里的范围并不只包含中国人使用的汉字,这个范围大概覆盖了CJK Unified Ideographs(中日韩统一表意文字列表),其中包含了中国、韩国、日本使用的多数常用汉字,可能还有越南使用的汉字。我这段《资治通鉴》是Traditional Chinese,对应的文字编码也涵盖在内。值得注意的是,这里的范围并不包含所有的汉字,一些偏难怪字并不在此范围内。如果你说想要过滤emoji、偏旁部首、注音符号之类的可以去检索一下对应的unicode范围。

b7b5896290de37a0f923a144dd7ff5ea.png

a10f4c5e11b9525c2a711d73075f8981.png

    这两行以标点符号将文本分割成小句,上面结果中包含了标点符号,下面结果不带。

    我写出来的代码比较难懂,这里展示给你看的经过了我的简化只包含了正则本身相关的内容。总结起来说,正则表达式是你处理字符串的最终方案,相当强大,但是同样复杂,一般场景下只需要使用字符串自带的方法即可,比如字符串自带方法可以按照一种字符分割字符串,也可以将一种字符替换成另一种。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值