需要搜索和替换的想法

时间:2014-04-19 09:42:39

标签: regex replace sed

在尝试解决问题时我很沮丧。也许任何人都有一个想法,可以帮助我。

我必须搜索特殊图案,然后将其剪掉。

输入数据是这样的数百万行:

  

| FIL = 827 | KAS = 1 | BON = 4189 | IND = 1 | BED = 2610 | LAD = 8011 | DAT = 20140317 | UHR = 090500 | TYP = LOGPLU | CEURO = 1 | BWWS = 1 | BDISP = 1 | BDRUCK = 1 | BSTART = 1个| BAH = 1 | BARTSCAN = 1 | BREPEAT = 1 | ZT0 = TI_NUMMER | ZW0 = 24008.5亿| ZA0 = MF   Sonnenblumen   2,5kg | ZT1 = TI_MENGE | ZW1 = 1 | ZT2 = TI_WGR | ZW2 = 9 | = ZT3 TI_MWST | ZW3 = 1 | ZT4 = TI_PARA | ZW4 = 0 | ZT5 = TI_PARA2 | ZW5 = 0 | ZT6 = TI_EPREIS | ZW6 = 7.99 | ZT7 = TI_GPREIS | ZW7 = 7.99 | ZT8 = TI_BASISDETAIL | ZW8 = 30 | 106

如果存在类似"ZW0=240"的模式,则此部分必须缩短为"ZW0=2400850"

任何想法?

1 个答案:

答案 0 :(得分:0)

如果你想从整个输入字符串中取出这部分而然后改变这个值,首先用

提取它
\b(ZW0=[0-9]+)

Regular expression visualization

Debuggex Demoword boundary (\b)对于防止ABCXYZW0=123048734之类的内容不正确匹配非常重要。它也可以是escaped或管道:(\|)。

提取此值后,您可以使用以下替换消除“除了尾随零之外的所有值”:

这是找到什么术语:

^(.*?[0-9]+?0)0+$

Regular expression visualization

Debuggex Demo

end-of-line anchor ($)在这里至关重要。没有它,它将导致ZW0=240。在数字(.*?)之前没有reluctant quantifier (?),您最终会得到ZW0=240085000000。这是因为它只会消除一个剩余的零。

或者,如果要更改此值,但保留整个输入字符串,请使用:


请考虑将Stack Overflow Regular Expressions FAQ加入书签以供将来参考。这个答案中的链接来自它。特别是,底部的部分包含一个在线测试人员列表,您可以在其中自行尝试。