我有文本数据要清理使用regex。然而,文本中的一些词后面紧跟着我想要删除的数字。
例如,文本的一行是:
Preface2 Contributors4 Abrreviations5 Acknowledgements8 Pes terminology10从RUPES project12环境服务支付中吸取的经验教训及其在Vietnam16章节中的潜力和榜样--将生态系统服务支付纳入越南政策和programmes17章节--为Tri流域创建激励机制,在巴赫马州国家公园为景观美景提供可持续融资24章建立林业碳固存支付机制,这是霍平省曹丰区的一个试点项目,第五章,地方税收共享,内川湾海洋保护区,Vietnam28综合和Recommendations30 References32 References32
以上文章的第一个词应该是“前言”,而不是“preface2”等等。
line = re.sub(r"[A-Za-z]+(\d+)", "", line)然而,这就删除了以下几个字:
Pes从RUPES环境服务支付中吸取的经验教训及其在将生态系统服务支付纳入越南政策和章节中的潜力和范例-在巴哈马州国家公园24分水岭建立森林固碳支付机制-第五章地方财政收入分享- Nha Trang Bay海洋保护区综合综合和
我怎么能只捕捉那些紧跟在单词后面的数字呢?
发布于 2019-01-02 16:03:22
您可以捕获文本部分,并将该单词替换为捕获的部分。它简单地写道:
re.sub(r"([A-Za-z]+)\d+", r"\1", line)发布于 2019-01-02 16:01:31
您可以尝试查看前面的断言,以在数字之前检查单词。在强制regex只匹配单词末尾的数字时,尝试单词边界(\b):
re.sub(r'(?<=\w+)\d+\b', '', line)希望这能有所帮助
编辑:不好意思,小故障,在评论中提到的匹配数字,也没有被文字所取代。这是因为(再次抱歉) \w匹配字母数字字符,而不是只匹配字母数字字符。根据要删除的内容,可以使用肯定的版本。
re.sub(r'(?<=[a-zA-Z])\d+\b', '', line)仅检查英文字母字符(可以将字符添加到a列表),请在数字或负数之前添加字符。
re.sub(r'(?<![\d\s])\d+\b', '', line)若要匹配所需数字之前的\d (数字)或\s (空格)的任何内容,请执行以下操作。这也将匹配标点符号,不过。
发布于 2019-01-02 16:05:19
试试这个:
line = re.sub(r"([A-Za-z]+)(\d+)", "\\2", line) #just keep the number
line = re.sub(r"([A-Za-z]+)(\d+)", "\\1", line) #just keep the word
line = re.sub(r"([A-Za-z]+)(\d+)", r"\2", line) #same as first one
line = re.sub(r"([A-Za-z]+)(\d+)", r"\1", line) #same as second one1将与单词匹配,\2匹配数字。请参阅:How to use python regex to replace using captured group?
https://stackoverflow.com/questions/54009329
复制相似问题