用正则表达式替换字符串末尾的 %?
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`.
我想删除某些文本末尾的 " %"
。我想用正则表达式来做,因为 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`.