[英]Python Multiple regex Patterns string reassignment using re.sub
我有一个字符串,我想识别超过 10 种可能的模式并在不使用For
循环的情况下替换它们
字符串示例 =
text = congrats. first recharge of USD 661 is successful & your service is valid till 2019-10-19. dial 0123456789 or click bit.ly/vf_asdqweerw in 46 hours to avail your reward.
预期结果 =
congrats. first recharge of USD <Amount> is successful & your service is valid till <Date>. dial <PhoneNumber> or click <Link> in 46 hours to avail your reward.
我有每个值的正则表达式模式字典:
dct = {
r"((http(s?)://)|(bit\\.l)|(www.)).+?(?=[, ]|$)": <Link>,
r"(\d{2}[-/.])(\w{1,3}|\d{2})[-/.](\d{2,4})\b" : <Date>,
.....
}
尝试了如何在 python 中使用正则表达式进行多次替换? 但没有成功
我目前的解决方案使用
for k,v in dct.items():
text = re.sub(k,v,text)
我需要一些更具可扩展性的东西。
最适合您需要的方法是使用有限状态传感器。 re.sub
就像 FST 的构建块,最好一次有效地使用它们。
有一个pynini
Python 库,它是OpenFST著名的 C++ 实现的接口。 它很难使用,需要一些培训才能理解基本概念。 比较好的介绍就是这个。
该方法大致类似于:
import pynini
mappings = [pynini.transducer(k, v) for k, v in dct.items()]
kvmap = pynini.union(*mappings)
def multi_substitute(in_str):
return pynini.shortestpath(pynini.compose(in_str, kvmap)).stringify()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.