在尝试解决问题时我很沮丧。也许任何人都有一个想法,可以帮助我。
我必须搜索特殊图案,然后将其剪掉。
输入数据是这样的数百万行:
| 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"
任何想法?
答案 0 :(得分:0)
如果你想从整个输入字符串中取出这部分而然后改变这个值,首先用
提取它\b(ZW0=[0-9]+)
Debuggex Demo。 word boundary (\b
)对于防止ABCXYZW0=123048734
之类的内容不正确匹配非常重要。它也可以是escaped或管道:(\|
)。
提取此值后,您可以使用以下替换消除“除了尾随零之外的所有值”:
(.*?[0-9]+?0)0+$
$1
这是找到什么术语:
^(.*?[0-9]+?0)0+$
end-of-line anchor ($
)在这里至关重要。没有它,它将导致ZW0=240
。在数字(.*?
)之前没有reluctant quantifier (?
),您最终会得到ZW0=240085000000
。这是因为它只会消除一个剩余的零。
或者,如果要更改此值,但保留整个输入字符串,请使用:
^(.*?)\|(ZW0=[0-9]+?0)0+(\|.*)$
$1$2$3
请考虑将Stack Overflow Regular Expressions FAQ加入书签以供将来参考。这个答案中的链接来自它。特别是,底部的部分包含一个在线测试人员列表,您可以在其中自行尝试。