我有以下字符串:
6103951001#136,00#S0#0#99999999#8000010000#10.12.2019#31.10.2019#“ MATZOURAKIS IOANNISMROA118#OSPh”#99470 ## APE A 54226#K
我要删除的是特殊字符HORIZONTAL_TAB(#),这是间“这里是字符串的一部分:‘MATZOURAKIS IOANNISMROA118#OSPh’
?我该怎么办
谢谢
PS。我正在使用以下内容从TAB分隔的文本文件数据中上传数据:char255的data_table类型标准表,
wa_data_table like line of data_table.
lv_file = p_file.
cl_gui_frontend_services=>gui_upload(
exporting
filename = lv_file
filetype = 'ASC'
changing
data_tab = data_table
现在,我正在执行以下操作以发现问题
loop at data_table into wa_data_table.
find all occurrences of '"' in wa_data_table match count lv_count.
if sy-subrc = 0 and lv_count = 2.
* REPLACE ALL OCCURRENCES OF REGEX
* '(#(?=[^"]*"[^"]*(?:"[^"]*"[^"]*)*$))' IN wa_data_table WITH ' '.
split wa_data_table at '"'
into split_data1 split_data2 split_data3.
replace all occurrences of cl_abap_char_utilities=>horizontal_tab
in split_data2 with ' '.
concatenate split_data1 split_data2 split_data3
into wa_data_table.
endif.
endloop.
我认为我们必须不使用字符#来处理cl_abap_char_utilities => horizontal_tab,而是使用另一种方式。
您可以在ABAP中使用以下命令找到并替换该字符:
data : lv_test type string VALUE '6103951001#136,00#S0#0#99999999#8000010000#10.12.2019# 31.10.2019#"MATZOURAKIS IOANNISMROA118#OSPh"#99470##APE A 54226#K'.
REPLACE ALL OCCURRENCES OF REGEX '(#(?=[^"]*"[^"]*(?:"[^"]*"[^"]*)*$))' IN lv_test WITH ''.
write lv_test.
这是此问题的正确解决方案。
replace all occurrences of regex
'(\t(?=[^"]*"[^"]*(?:"[^"]*"[^"]*)*$))'
in table data_table with ' '.
replace all occurrences of regex '["]' in table data_table with ''.
谢谢,我将在今天或明天进行测试。有人可以向我解释REGEX(#(?= [^“] *” [^“] *(?:” [^“] *” [^“] *)* $))吗?
转到此网站:regex101.com。在其中复制正则表达式,然后在右侧将为您提供解释(在注释中输入要多一些)。@ekekakos
它在SAP中不起作用。
@ekekakos我测试了它,因为我在se38中创建了一个新程序,然后将该代码粘贴到该程序中,并没有问题地执行了它。我们正在使用BW 7.4。
好吧,我找到了解决我问题的答案。正如我告诉您的那样,这是一个TAB字符,在SAP中显示为#。因此我们必须将\替换为\ t,这样才能完成正则表达式:'(\ t(?= [^“] *” [^“] *(?:” [^“] *” [^“] *)* $))'。效果很好,非常感谢。