Python:使用条件消除标点符号

时间:2018-11-19 12:06:35

标签: python regex database ascii

我可以使用此行删除数据框中的标点符号:

df[column_name].replace(r'[^\s0-9a-zA-Z]+', r'', regex=True, inplace=True)

但是我想保留一些例外:

我不想将15,00转换为1500。如果文本内有逗号,我想保留它。有没有简单的方法可以做到这一点。谢谢。

1 个答案:

答案 0 :(得分:0)

如果在样式后面附加lodash,则可以避免在使用数字时在数字之间匹配逗号:

(?<!\d,(?=\d))

请参见regex demo

简而言之,r'[^\s0-9a-zA-Z](?<!\d,(?=\d))' ^^^^^^^^^^^^^^ 匹配除空格和ASCII字母或数字之外的任何字符。如果紧靠当前位置左侧的数字[^\s0-9a-zA-Z]和紧靠(?<!\d,(?=\d))右侧的数字,则,后面的匹配项将失败。要确保仅将逗号“映射”到,后向模式中,必须在后向内部进行前瞻。

此外,如果您使用[^\s0-9a-zA-Z],有一种方法可以在匹配否定字符类之前执行此检查,请参见demo。但是,这种方法的成本要高得多,因为在任何文本或零宽度断言中都不会“锚定”后面的内容。