我写了一个小python程序来更改regex,并将我的pdf教科书转换为音频文件,以便在开车时收听。我突然想到,我可以使用内置TTS和regex替换的pdf阅读程序Librera Reader来更灵活地完成这项任务,同时能够轻松阅读。然而,Librera阅读器不能在替换文本中使用组引用。
这是我一直在使用的替代品:
([a-zA-Z|)|%][.|,|a-z|)])d+(?:[-,]d+)*
这里有一个简化的版本,它完成了这个问题的大部分工作:
([a-zA-Z][.])d+
替换为:
1
有没有一种方法可以使用Regex来捕获一个字母,后面跟着一个句点,后面跟着这样的数字,而不需要在替换中使用组引用,也不需要捕获数字-句点-数字字符串。这样我就可以进行以下转换:
测试单词。7另外1.5是一个可以测试的数字。9
测试单词。1.5也是一个可以测试的数字。
我知道您在[...]
中使用了|
;"更好";在视觉上分离了字符类的各个部分,但您也将|
作为现在与文字管道匹配的类的一部分。你需要拆下这些管子。
为了解决当前的问题,您可以将捕获组变成一个正向后备,因为模式的长度已知(在要删除的数字(范围(之前只有两个字符(。
您可以使用
(?<=[a-zA-Z)%][.,a-z)])d+(?:[-,]d+)*
查看regex演示
(?<=[a-zA-Z)%][.,a-z)])
正后方查找与紧跟在前面的位置匹配
[a-zA-Z)%]
-ASCII字母,)
或%
,然后[.,a-z)]
-.
、,
、小写ASCII字母或)