识别列表中几乎相同的消息

时间:2015-02-19 07:59:43

标签: regex string comparison abap

这看起来像一个简单的任务,但你会如何解决它?我现在没有得到任何解决方案。

ls_message-text = 'Pernr. 12345678 (Pete Peterson) is valid (06/2015).
append ls_message to lt_message.

ls_message-text = 'Pernr. 12345678 (Pete Peterson) is valid (07/2015).
append ls_message to lt_message.

这是我得到的代码,事实是,这是我在我的应用程序中显示的消息。客户说2条消息是相同的。第二个应删除。

你如何比较删除该行?该表可能包含多于2行,也包含另一个文本,如“无效”。

我无法扩展结构以包含更多字段用于比较,我只能在这一个字段上使用字符串比较。是否可以使用正则表达式进行字符串比较?

3 个答案:

答案 0 :(得分:2)

假设您只想为每个唯一的Pernr保留一条消息。在lt_message中,您可以使用正则表达式来过滤Pernr。并将其用作" key"。现在,您可以删除与该密钥匹配的lt_message的第一条消息。

如果您只想保留某些消息,请展开您的正则表达式,例如只有"有效"的。

答案 1 :(得分:2)

也许您可以使用Levenshtein距离来解决您的需求。 ABAP具有内置功能"距离"它为您提供了将一个字符串转换为另一个字符串的操作数。例如:

   DATA msg1 type string.
   DATA msg2 type string.

   msg1 = 'Levehnstein Distance 7/2015'.

   msg2 = 'Levehnstein Distance 6/2015'.

   data l_distance type i.

   l_distance = distance( val1 = msg1 val2 =  msg2 ).


   if l_distance lt 2 .
    "It's almost the same text
    endif.

在这种情况下,l_distance将为1,因为只需要一个操作(替换)。

希望这有帮助,

答案 2 :(得分:0)

您是否尝试过编程DEMO_REGEX_TOY。 给出了如何使用Regular expresion的想法,这可能会解决问题