2016-10-16 2 views
1

내가 좋아하는 문자열에서 달의 회계 연도 월 + 일을 추출 후 찾고 있어요이 하나문장의 나머지 부분이없는 성냥 그룹 만 추출하는 방법은 무엇입니까?

Fiscal year end: September 30; reporting period for blablablabla 
Fiscal year end: March 31; reporting period for blablablabla 

당신이 볼 수 있듯이, 모든 문자열이 회계 연도 말에 시작, 콜론, 공간, 달, 공간, 달의 날, 세미콜론, 쓸모없는 텍스트

내 정규식 :

sub("^Fiscal year end: ([A-Za-z]*?\\s\\d*);","\\1", "Fiscal year end: March 31; reporting period for") 

결과 :

[1] "March 31 reporting period for" 

내가 예상 한 것 : 3 월 31 일 (내가 성냥 그룹을 지정했기 때문에). 나머지는 일치하지 않으므로 수정되지는 않았지만 일치 그룹 만 얻는 가장 좋은 방법은 무엇입니까?

제가 사용하여 stringr과 해결책을 발견

 [,1]       [,2]  
[1,] "Fiscal year end: March 31;" "March 31" 

그래서 결과 가운데 [1,2] 복용하여 준다 : 매트릭스에게 매치 기 어느 하나 개의 요소를 제공

str_match("Fiscal year end: March 31; reporting period for", "^Fiscal year end: ([A-Za-z]*?\\s\\d*);") 

내가 원하는 것이지만, 쉬운 방법이 있다고 생각합니다.

+0

주, 당신은 실제로 TRE 정규식 맛을 사용하는 뉴 라인을 포함한 문자. –

+0

@ WiktorStribiżew tre가 의미하는 것 – rawr

+0

@rawr : 나는 약어가 무엇을 의미하는지 결코 생각하지 못했습니다. 확실히 "정규 표현식"을 사용하십시오. 자세한 내용은 http://laurikari.net/tre/about/을 참조하십시오. 정확한 'T'설명을 찾을 수 없습니다. –

답변

2

그냥 TRE 정규식 패턴에 어떤 0+ 문자와 일치합니다 그 말에 .*을 추가

sub("^Fiscal year end: ([A-Za-z]+\\s*\\d+);.*","\\1", "Fiscal year end: March 31; reporting period for") 

내가 [A-Za-z]+ 패턴 욕심이 만든 online R demo

참고를 참조하십시오 (그것은 더 자연스러운 것 같다 어쨌든 어떤 글자가 있기 때문에) 그리고 그 뒤에 + 한정 기호를 추가하고 하나 이상의 문자와 일치하도록 \d을 추가합니다 (이 경우 시나리오에서 필수 사항으로 보입니다).

패턴 자세한 사항 :

  • ^ - 문자열
  • 의 시작
  • Fiscal year end: - 리터럴 문자
  • ([A-Za-z]+\\s*\\d+)의 순서 - 그룹 1 캡처
    • [A-Za-z]+-1 이상의 문자
    • - 0+ 공백
    • \\d+ - 1+ 자리
  • ;
  • - 세미콜론
  • .*-문자열 년 말까지 LINEBREAK 기호를 포함한 모든 0+ 문자.
+0

고마워, 이제 알았어 : 내 정규식이 세미콜론 뒤에 아무 것도 나오지 않아서 하위가 단순히 거기에 남겨 두었습니다. 이제는 모든 것이 일치하므로 서브 그룹은 일치하는 그룹으로 바뀝니다. –

1

당신은 format와 관련된 부분을 선택 후 Date로 문자열을 구문 분석하고 있습니다 :

format(as.Date(x, format = "Fiscal year end: %B %d"), "%B %d") 
# [1] "September 30" "March 31" 

as.Dateformat 인수, 당신은뿐만 아니라 %에 의해 도입 된 변환 사양 (포함 할 수있다)뿐만 아니라 다른 문자; ?strptime의 세부 정보 섹션을 참조하십시오.

[n] 변환 형식의 일부가 아닌 문자가 문자 그대로 해석됩니다.

...과 :

각 입력 문자열 지정된 형식 필요한만큼 멀리 처리 : 후행 문자는 무시된다.

뿐만 아니라이 ?as.Date주의 : 날짜 문자열 완전히 날짜를 지정하지 않습니다

경우, 반환 된 대답은 시스템 별 수있다. 가장 일반적인 동작은 누락 된 년, 월 또는 일이 현재 것임을 가정하는 것입니다. 날짜가 잘못 지정되면 신뢰할 수있는 구현에서 오류가 발생하고 날짜는 NA으로보고됩니다.


x <- c("Fiscal year end: September 30; reporting period for blablablabla", 
     "Fiscal year end: March 31; reporting period for blablablabla") 
0

은 감안하여 문자열 '패턴 :

당신이 볼 수 있듯이, 모든 문자열은 회계 연도 말에 시작, 콜론, 공간, 달, 공간의 월, 세미콜론, 쓸모없는 텍스트의 날

또한이 작업을 수행 할 수 있습니다 :

.` 어떤을 일치합니다`는 PCRE 태그 제거해야는`sub`에`펄 = TRUE '를 사용, 그렇게하지 않는
sub(";.*$","", sub("Fiscal year end: ", "", str)) 

#[1] "September 30" "March 31" 

str <- c("Fiscal year end: September 30; reporting period for blablablabla", 
     "Fiscal year end: March 31; reporting period for blablablabla") 
관련 문제