【问题标题】:Check if string contains an isolated word检查字符串是否包含孤立的单词
【发布时间】:2020-06-21 05:13:36
【问题描述】:

当我在字符串中搜索单词时,我通常会这样做:

CONSTANTS:
      lc_word TYPE string VALUE 'TEST',
      .

IF ls_structure-name CS lc_word.
      "count( ).
ENDIF.

但这次我只希望单词是孤立的并且区分大小写的。
例如:

  • TESTer, Test 不应该算
  • TEST, lol TEST, TEST yourself, hi TEST yourself 应该算

有人知道怎么做吗?

【问题讨论】:

  • 如果先拆分成单词,再测试单词是否全大写(if word = to_upper( word ).)

标签: regex abap


【解决方案1】:

您可以使用正则表达式检查:

FIND REGEX '(\s|^)TEST(\s|$)' IN ls_structure-name.

IF sy-subrc EQ 0.
      "count( ).
ENDIF.

它检查以下模式:

  • 空格或字符串的开头
  • '测试'
  • 空格或字符串结尾

【讨论】:

  • @Samleijenhorst :您的解决方案适用于 OP 提供的测试用例,但一般我建议使用指定的 \b 作为单词边界而不是空格字符 \s,因为单词边界正是OP 要求并且有 \s 未涵盖的边缘情况@
  • @konstantin 你有边缘案例的例子吗?
  • @Cold_Class 如果您的单词后跟“TEST”之后的任何特殊字符,例如一个逗号。检查这些示例:regex101.com/r/KogWop/2。使用\b 他们都很好:regex101.com/r/KogWop/3
【解决方案2】:

您可以将句子拆分成表格,然后检查它是否存在于 tale 中。像这样:

DATA: lv_string TYPE string VALUE 'One two TEST three',
      lv_var    TYPE string VALUE 'TEST',
      lv_count  TYPE i.


SPLIT lv_string AT space INTO TABLE DATA(lt_string).
IF line_exists( lt_string[ table_line = lv_var ] ).
  lv_count = lv_count + 1.
ENDIF.
WRITE: / lv_count.

【讨论】:

    猜你喜欢
    • 2014-01-25
    • 1970-01-01
    • 2013-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多