Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

How can i Pick the data from the string

Former Member
0 Kudos

Hi Gurus

How can i Pick the data from the string using regular expressions. for ex:

1) 10000-san0001

2) 3000000-rani0001

3) 30-super003

its doesnt mainain how many characters.

like this i got string. now i only want after the symobl( -) text (san

rani

super) .how can i pick that

can anyone provide me regular expressions.

Thanks & Regards

Sandya

Edited by: sandya rani on Jan 29, 2010 2:51 PM

10 REPLIES 10

thomas_jung
Developer Advocate
Developer Advocate
0 Kudos

Note: Moved thread from Web Dynpro ABAP to ABAP General.

kesavadas_thekkillath
Active Contributor
0 Kudos

You can also use SPLIT.

split lv_string at '-' into lv_str1 lv_str2.

write lv_str2.

Former Member
0 Kudos

Hi,

Pls find the below logic where str1 wwil hold text data.

data: l_string type string,

str1 TYPE string,

str2 TYPE string.

l_string = '3000000-rani0001'.

SPLIT l_string AT '-' INTO: str1 str2 .

clear: l_string,str1.

SPLIT str2 AT '0' INTO: str1 l_string.

write:/ str1.

0 Kudos

Hi lokesh

thanks for ur reply .i need only text .i cant use this statement SPLIT str2 AT '0' INTO: str1 l_string. coz it does not maintain "0" alwasy please see the emple.

1) 10000-san2001

2) 3000000-ran10001

3) 30-super3003

4)4000000000-naga100001.

5)4-swarna10000000001.

i only want 1)san

2)ran

3)super

4)naga

5)swarna

0 Kudos

Try this,

l_string = '3000000-rani0001'.

SPLIT l_string AT '-' INTO str1 str2 .

replace all occurrences of REGEX '[/d]' in str with space.

write str2.

0 Kudos

Hi Kesav

i tried .its not working .output is coming like this ex: rani0001

0 Kudos

Try this

lv_string = '3000000-rani0001'.

SPLIT lv_string AT '-' INTO str1 str2 .

lv_len = strlen( str2 ).

FIND REGEX '([[:alpha:]]*)' IN str2 IGNORING CASE MATCH OFFSET lv_moff MATCH LENGTH lv_mlen.

lv_length = lv_len - lv_mlen.

lv_out = str2+lv_mlen(lv_length).

write lv_out.

if you need the text then

FIND REGEX '(*[[:/d:]])' IN str2 MATCH OFFSET lv_moff MATCH LENGTH lv_mlen.

lv_out = str2+0(lv_mlen).

try also

Replace all occurrences of REGEX '(*[[:/d:]])' IN str2 with space.

Edited by: Keshav.T on Jan 31, 2010 10:53 AM

raymond_giuseppi
Active Contributor
0 Kudos

Try a substring_after function like described in [substring, substring_... - Substring Functions|http://help.sap.com/abapdocu_70/en/ABENSUBSTRING_FUNCTIONS.htm] in [Regular Expressions|http://help.sap.com/abapdocu_70/en/ABENREGULAR_EXPRESSIONS.htm]

resultstring = substring_after( val = inputstring sub = '-' ). 

Regards,

Raymond

Former Member
0 Kudos

REPORT ZTEST.

data: str1 TYPE string,

str2 TYPE string,

str3 TYPE string,

lenth TYPE string,

str4 TYPE string,

temp type i value '0'.

data: ii type i value '0',

jj type i value '1'.

Data : begin of itab OCCURS 0,

l_string type string,

end of itab.

itab-l_string = '3000000-GUNDALA20001'.

append itab.

clear itab.

itab-l_string = '2045677-iCVj1001'.

append itab.

clear itab.

itab-l_string = '3000-ragh30001'.

append itab.

clear itab.

loop at itab.

MOVE 0 TO ii.

MOVE 1 TO jj.

SPLIT itab-l_string AT '-' INTO: str1 str2 .

clear: itab-l_string,str1.

lenth = strlen( str2 ).

while temp < lenth.

str4 = str2+ii(jj).

if str4 CA 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' or str4 CA 'abcdefghijklmnopqrstuvwxyz'.

if sy-subrc = 0.

CONCATENATE str3 str4 into str3.

endif.

ii = ii + 1.

ENDIF.

temp = temp + 1.

ENDWHILE.

write: / str3.

clear: itab, ii, jj,str1, str2, str3, str4,temp, lenth.

Endloop.

0 Kudos

Hi avoid complications and use this.


data: str1 TYPE string,
str2 TYPE string.

Data : begin of itab OCCURS 0,
l_string type string,
end of itab.
itab-l_string = '3000000-GUNDALA20001'.
append itab.
clear itab.
itab-l_string = '2045677-iCVj1001'.
append itab.
clear itab.
itab-l_string = '3000-ragh30001'.
append itab.
clear itab.

loop at itab.
  SPLIT itab-l_string AT '-' INTO: str1 str2 .
  if str2 ca '1234567890'.
    write / str2+sy-fdpos(*).
  endif.
Endloop.