用正则表达式替换字符串末尾的 %?

Replace % in the end of string with Regex?

我想删除某些文本末尾的 " %"。我想用正则表达式来做,因为 ABAP 不容易处理字符串末尾的文本。

DATA lv_vtext TYPE c LENGTH 10 VALUE 'TEST %'.
REPLACE REGEX ' %$' IN lv_vtext WITH ''.

但它并没有取代任何东西。当我遗漏 "$" 时,文本将按预期被删除,但我担心它可能会找到比预期更多的出现次数。

我用 \z\Z 代替 $ 进行了试验,但无济于事。

您可以使用

REPLACE REGEX '\s%\s*$' IN lv_vtext WITH ''

使用 \s 的好处是它可以匹配任何 Unicode 空白字符。 \s*$ 匹配您可能遗漏的任何尾随(空白)空格。

整个模式匹配

  • \s - 任何空格
  • % - 一个 % 字符
  • \s* - 零个或多个空格
  • $ - 在字符串末尾。

这个答案是关于没有 REGEX 的替代方法。 POSIX 正则表达式很慢,而且有些人不愿意使用它,所以如果你不是完全关闭在普通 ABAP 中使用它:

lv_vtext = COND #( WHEN contains( val = lv_vtext end = ` %` ) 
           THEN substring( val = lv_vtext len = strlen( lv_vtext ) - 2 )
           ELSE lv_vtext ).

带上下文的代码:

DATA(lv_vtext) = `test %`.
lv_vtext = COND #( WHEN contains( val = lv_vtext end = ` %` ) 
           THEN substring( val = lv_vtext len = strlen( lv_vtext ) - 2 )
           ELSE lv_vtext ).
ASSERT lv_vtext = `test`.