2017-01-03 2 views
0

정규식에 대한 책을 읽은 많은있다, 나는 약간의 이상 호도하고 그것으로 많은 시간을 넣어,하지만 지금은 나에게 더 학습을위한 조언과 방향을 제시하는 사람을 얻을 수 있었으면하고 정규식. 내 데이터의 열 중의 자동차 참조가 라인을 찾기 위해 GREP을 사용하고사용은

SCC을 설정합니다. 그래서 다음 명령을 사용합니다 :

sapply(SCC, grep, pattern="(vehicle|motor.*vehicle|motor)", 
    ignore.case = TRUE, 
    fixed = FALSE) 

그리고 나는 가능한 모든 관심 분야에있는 모든 열의 목록을 얻습니다.

그때 나는 모든 행이 캡처 된 상황을 확인하기 위해) 그렙 (의 value=TRUE 인수를 사용하고, 올라가지 (독특한()).

여기에 해당 명령 일부 이러한 항목은 다음과 같습니다

unique(unlist(sapply(SCC, grep, pattern="(vehicle|motor.*vehicle|motor)", ignore.case=TRUE, fixed=FALSE, value=TRUE))) 
     [1] "Int Comb /Engine Testing /Rocket Engine Testing /Rocket Motor: Solid Propellant" 
     [2] "Highway Veh - Gasoline - Light Duty Vehicles (LDGV) - Total: All Road Types" 
     [3] "Highway Veh - Gasoline - Light Duty Vehicles (LDGV) - Rural Interstate: Total" 
     [4] "Highway Veh - Gasoline - Light Duty Vehicles (LDGV) - Interstate: Rural Time 1" 
     [5] "Highway Veh - Gasoline - Light Duty Vehicles (LDGV) - Interstate: Rural Time 2"  
     . 
     . 
     . 
    [329] "Off-highway Gasoline, 4-Stroke /Recreational Equipt /Motorcycles: Off-road" 
    [330] "Off-highway Gasoline, 4-Stroke /Recreational Equipt /All Terrain Vehicles" 
    [331] "Off-highway Gasoline, 4-Stroke /Recreational Equipt /Specialty Vehicles/Carts" 
    [332] "Off-highway LPG /Recreational Equipt /Motorcycles: Off-road" 

내 그렙의 대상이 있었는지 (411 개)의 고유 항목의 총이 있었다 (차량 | 모터 * 자동차 | 모터.). 나는 이것을 바꾸어 문자열 'Rocket Motor'가있는 줄 [1]이 포함되지 않도록하려고했습니다. 그래서, 나는이 패턴을 사용합니다 = "(자동차 | 모터. * 자동차 | 오토바이)".

나는 내가 원하는 것을 가지고 있지만 독점 문자열과 일치하는 정규 표현식을 사용하는 방법이 있는지 궁금했다. 나는 정규식을 사용하는 방법에 대해 조금 읽고이 같은 것을 사용하여 시도 :

pattern = "^(?=.*?vehicle|motor.*vehicle|motor)((?!\brocket motor\b).)*$" 

나는 로켓 모터 '와 모든 일치하도록 시도'차량, 자동차, 모터를,하지만 '. 작동하지 않고 오류가 발생합니다. R, 특히 grep 및 관련 함수에서 regex 사용에 대해 자세히 알고 싶습니다. 의미있는 정규식을 사용하는 것이 얼마나 가까운 거리에 있습니까? 특히 R에 사용할 수있는 정규식 유형에 제한이 있습니까? 나는 앞으로 정규 표현식을 사용하게 될 것이고 모든 노력에서 조금 더 배우고 싶습니다.

다음은 내가 가진 오류는 다음과 같습니다

Error in FUN(X[[i]], ...) : 
    invalid regular expression '^(?=.*vehicle|motor.*vehicle|motor)((?rocket moto).)*$', reason 'Invalid regexp' 
+0

@Jota 내가 틀렸다고해도 대답 상자에 들어갑니다. – djechlin

+0

감사합니다. 조타, 이제 R에서 정규 표현식에 대해 조금 더 잘 알고 있습니다. 잘못된 정규 표현식 오류가 발생하지 않습니다. 그것은 내가 지금 필요로하는 정확한 대답 일 것이다. – Bhail

답변

3

, 당신이있어 오류와 관련하여 기본 R.

에서 정규 표현식에 대한 자세한 내용은 ?regex을 참조 세부 사항 섹션을 참조하십시오. 두 번째 문장은 다음과 같습니다 정규 표현식의

두 가지 유형이 R에 사용되는, 는 펄 = TRUE에서 사용 정규 표현 (기본값)와펄과 같은 정규 표현식을 확장했다.

Perl과 같은 정규 표현식을 사용하려고하므로 perl = TRUE을 설정해야합니다. 세부 섹션 후

, 당신은 더 많은 정보를 찾을 수있는 펄과 같은 정규 표현식 섹션 다음에 확장 정규 표현식 섹션이 있습니다.


더 정규 표현식 옵션의 경우, 당신은 또한 ICU 라이브러리를 사용 stringi 패키지에 볼 수 있습니다.