2013-04-17 7 views
-4
나는 아래의 문자열에서 레코드 번호를 추출하는 정규식이 필요

,Java에서 String의 레코드 번호를 가져 오는 정규식?

String extract = "Purchase Order HDL/17-04-2013/PRO_1311 is saved successfully" 

출력 :

HDL/17-04-2013/PRO_1311 

제가 인터넷 검색을 시도했지만 결과를 얻을 수 없습니다. Pls가 제안합니다. 같은

+4

String.substring()? – anstarovoyt

+0

@ user1787641 Google에서 어떤 시도를 했습니까? –

+0

아무 것도 시도하지 않았습니다. – m0skit0

답변

0

String recordNumber = str.replaceAll(".*?(\\w+/\\d{2}-\\d{2}-\\d{4}/\\w+).*", "$1"); 
+0

답장을 보내 주셔서 감사합니다. .. 그 일을 설명해 주시면 ... # – user1787641

+0

$ 1은 (는) 그룹 # 1에 대한 참조이며, 이것은 expr inside()입니다. 즉, 대괄호 안에 expr과 일치하는 부분으로 입력 문자열을 대체합니다. –

0

뭔가 :

"Purchase Order ([A-Z]+/\d{2}-\d{2}-\d{4}/[A-Z]+_\d+) is saved successfully" 

이 방법 당신은 당신이 첫 번째 캡처 그룹에 필요한 것을 얻을 수 있습니다.

물론 이것은 구매 주문의 패턴에 따라 다르며 정규식에 대해 읽어야합니다.

0

는 정규식을 사용할 필요가 특별한 이유가 시도? 성능 및 가독성을 이유로 더 적합한 대안이 있다면이를 피하는 것이 좋습니다.

이 경우 접두사와 접미사는 항상 같은 길이이므로 String.substring을 사용하여 간단히 제거 할 수 있습니다. 당신이 약 정말 분명히하려는 경우 (

String extract = "Purchase Order HDL/17-04-2013/PRO_1311 is saved successfully"; 
String orderId = extract.substring(15, extract.length() - 22); 

: 주문 ID는 항상 " is saved successfully"에 의해 "Purchase Order " 접두어하고, 다음에 경우에, 당신은 뒤에 떨어져 전면 오프 15 자, 22 자자를 수 있습니다 이 매직 넘버가 어디에서 온, 당신은 예를 들어 private static final int PREFIX_LENGTH = "Purchase Order ".length();)로 정의 할 수

뭔가처럼
+0

안녕하세요. 답장을 보내 주셔서 감사합니다. 문제는 레코드 번호 위치가 다를 수 있습니다. 때로는 "구매 주문 저장 성공 : HDL/17-04-2013/PRO_1311"로 표시됩니다. – user1787641

0

:이 MATC 정규 표현식이다

String s = "Purchase Order HDL/17-04-2013/PRO_1311 is saved successfully"; 
Pattern p = Pattern.compile("(?<=Purchase Order).+?(?= is saved successfully)"); 
Matcher m = p.matcher(s); 
if (m.find()) { 
    System.out.println(m.group()); 
} 

두 문구 중간에 무엇이든 있습니다. 첫 번째 괄호는보기 뒤 문자열이며 두 번째 괄호 앞 문자입니다.

관련 문제