正则表达式用于从数字中删除字符,但不是所有字符

时间:2017-06-18 12:57:23

标签: regex

我在OpenRefine中有一个专栏,我想操纵:

有字符串(例如:FL),包含数字的字符串(123F423)和数字

我想摆脱所有字母(A-Z)"污染"数字(如123F423),但我不想改变"清洁"字符串和数字。

示例:

FL - > FL

123F324 - > 123324

432531 - > 432531

AB - > AB

342J34 - > 34234

2 个答案:

答案 0 :(得分:1)

您可以搜索并删除:

(?<=\d)[A-Za-z]+|[A-Za-z]+(?=\d)

See demo

正则表达式表示一个或多个字母,前面没有数字或后面没有数字。它使用lookaround

编辑:如果不支持环视,您只需搜索

即可
(\d)[A-Za-z]+|[A-Za-z]+(\d)

并替换为$1$2(请参阅demo 2

答案 1 :(得分:0)

由于正则表达式旨在提供特定匹配而非缺少匹配,因此您无法在单个操作中执行所需操作,并且不会为您连接多个结果。

例如,您可以为[A-Z]+重复正则表达式并删除有问题的匹配项,或在单个正则表达式中搜索所有数字[0-9]+并连接所有匹配项。

第二个选项会更快,因为它只评估表达式一次。

修改

@horcrux有更好的答案。