AMcoder - javascript, python, java, html, php, sql

Քաղեք տեքստը փակագծերում R-ում

Երկու հարակից հարց. Ես ունեմ տեքստային տվյալների վեկտորներ, ինչպիսիք են

"a(b)jk(p)"  "ipq"  "e(ijkl)"

և ցանկանում եք հեշտությամբ բաժանել այն վեկտորի մեջ, որը պարունակում է տեքստը փակագծերից ԴՈՒՐՍ.

"ajk"  "ipq"  "e"

և վեկտոր, որը պարունակում է տեքստը փակագծերի ներսում.

"bp"   ""  "ijkl"

Կա՞ արդյոք դա անելու որևէ հեշտ միջոց: Լրացուցիչ դժվարությունն այն է, որ դրանք կարող են բավականին մեծանալ և ունենալ մեծ (անսահմանափակ) թվով փակագծեր: Այսպիսով, ես չեմ կարող պարզապես տեքստը «նախա/տեղադրել» փակագծերը և ավելի խելացի լուծման կարիք ունեմ:

10.03.2015


Պատասխանները:


1

Տեքստը փակագծից դուրս

> x <- c("a(b)jk(p)"  ,"ipq" , "e(ijkl)")
> gsub("\\([^()]*\\)", "", x)
[1] "ajk" "ipq" "e"  

Տեքստը փակագծում

> x <- c("a(b)jk(p)"  ,"ipq" , "e(ijkl)")
> gsub("(?<=\\()[^()]*(?=\\))(*SKIP)(*F)|.", "", x, perl=T)
[1] "bp"   ""     "ijkl"

(?<=\\()[^()]*(?=\\))-ը համընկնում է փակագծերում առկա բոլոր նիշերին, իսկ հետո հետևյալ (*SKIP)(*F)-ը ստիպում է համընկնել ձախողմանը: Այժմ այն ​​փորձում է կատարել այն օրինաչափությունը, որն անմիջապես հետո եղել է | նշանը մնացած տողի նկատմամբ: Այսպիսով, . կետը համապատասխանում է բոլոր այն նիշերին, որոնք դեռ բաց չեն թողնվել: Բոլոր համընկնող նիշերը դատարկ տողով փոխարինելու դեպքում միայն տեքստն առկա է ռակետների ներսում:

> gsub("\\(([^()]*)\\)|.", "\\1", x, perl=T)
[1] "bp"   ""     "ijkl"

Այս ռեգեքսը կգրանցի փակագծերում առկա բոլոր նիշերը և կհամապատասխանի բոլոր մյուս նիշերին: |. կամ մասը օգնում է համապատասխանեցնել մնացած բոլոր նիշերը, բացի գրավվածներից: Այսպիսով, փոխարինելով բոլոր նիշերը խմբի ինդեքս 1-ի ներսում առկա նիշերով, դուք կստանաք ցանկալի արդյունք:

10.03.2015
  • Ես կենթադրեի, որ դա պատահական է, քանի որ դեմ քվեարկությունն անիմաստ է: Արդյունահանումը լավ էր, քանի որ դուք հանեցիք և հավաքեցիք առանց pasteing-ի: +1 10.03.2015
  • @TylerRinker Այո, ինչ-որ մեկը բարկացավ ինձ վրա և այդպիսով նա դրեց 4 դեմ ձայն իմ պատասխանի վրա, որն ունի նվազագույն միավոր 1: Իմ վատը: 10.03.2015
  • @TylerRinker կարո՞ղ եք հղում տալ qdapRegex փաթեթին: 10.03.2015
  • Առաջին մեկնաբանությանը մանր :-( Երկրորդին... Անշուշտ github.com/trinker/qdapRegex Ես էլ իմ պատասխանի մեջ հղում արեցի, դա նույնպես CRAN փաթեթ է: 10.03.2015
  • @TylerRinker qdapRegex-ը միանշանակ լավ հավաքված փաթեթ էր: 11.03.2015

  • 2

    rm_round ֆունկցիան qdapRegex փաթեթում, ես կարծում եմ, որ ծնվել է սա անելու համար.

    Նախ մենք կստանանք և բեռնենք փաթեթը pacman-ի միջոցով

    if (!require("pacman")) install.packages("pacman")
    pacman::p_load(qdapRegex)
    

    ## Այնուհետև մենք կարող ենք օգտագործել այն ձեր ուզած մասերը հեռացնելու և հանելու համար:

    x <-c("a(b)jk(p)", "ipq", "e(ijkl)")
    
    rm_round(x)
    
    ## [1] "ajk" "ipq" "e" 
    
    rm_round(x, extract=TRUE)
    
    ## [[1]]
    ## [1] "b" "p"
    ## 
    ## [[2]]
    ## [1] NA
    ## 
    ## [[3]]
    ## [1] "ijkl"
    

    b-ը և p-ը խտացնելու համար օգտագործեք.

    sapply(rm_round(x, extract=TRUE), paste, collapse="")
    
    ## [1] "bp"   "NA"   "ijkl"
    
    10.03.2015
  • regmatches(x,gregexpr("(?<=\\().+?(?=\\))",x,perl=TRUE)) regmatches տարբերակի համար հիմքում, regmatches(x,gregexpr("(?<=\\)|^).+?(?=\\(|$)",x,perl=TRUE))-ով հակառակի համար: 10.03.2015
  • @thelatemail Դա արժանի է իր պատասխանին: 10.03.2015
  • Նոր նյութեր

    Օգտագործելով Fetch Vs Axios.Js-ը՝ HTTP հարցումներ կատարելու համար
    JavaScript-ը կարող է ցանցային հարցումներ ուղարկել սերվեր և բեռնել նոր տեղեկատվություն, երբ դա անհրաժեշտ լինի: Օրինակ, մենք կարող ենք օգտագործել ցանցային հարցումը պատվեր ներկայացնելու,..

    Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար
    Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար Ինչպե՞ս հանգստացնել ձեր միտքը և աշխատեցնել ձեր պրոցեսորը: Ինչպես մնալ հանգիստ և զարգանալ ճնշման տակ...

    Մեքենայի ուսուցում բանկային և ֆինանսների ոլորտում
    Բարդ, խելացի անվտանգության համակարգերը և հաճախորդների սպասարկման պարզեցված ծառայությունները բիզնեսի հաջողության բանալին են: Ֆինանսական հաստատությունները, մասնավորապես, պետք է առաջ մնան կորի..

    Ես AI-ին հարցրի կյանքի իմաստը, այն ինչ ասում էր, ցնցող էր:
    Այն պահից ի վեր, երբ ես իմացա Արհեստական ​​ինտելեկտի մասին, ես հիացած էի այն բանով, թե ինչպես է այն կարողանում հասկանալ մարդկային նորմալ տեքստը, և այն կարող է առաջացնել իր սեփական արձագանքը դրա..

    Ինչպես սովորել կոդավորումը Python-ում վագրի պես:
    Սովորելու համար ծրագրավորման նոր լեզու ընտրելը բարդ է: Անկախ նրանից, թե դուք սկսնակ եք, թե առաջադեմ, դա օգնում է իմանալ, թե ինչ թեմաներ պետք է սովորել: Ծրագրավորման լեզվի հիմունքները, դրա..

    C++-ի օրական բիթ(ե) | Ամենաերկար պալինդրոմային ենթաշարը
    C++ #198-ի ամենօրյա բիթ(ե), Ընդհանուր հարցազրույցի խնդիր. Ամենաերկար պալինդրոմային ենթատող: Այսօր մենք կանդրադառնանք հարցազրույցի ընդհանուր խնդրին. Ամենաերկար palindromic substring...

    Kydavra ICAReducer՝ ձեր տվյալների ծավալայինությունը նվազեցնելու համար
    Ի՞նչ է ICAReducer-ը: ICAReducer-ն աշխատում է հետևյալ կերպ. այն նվազեցնում է նրանց միջև բարձր փոխկապակցված հատկանիշները մինչև մեկ սյունակ: Բավականին նման է PCAreducer-ին, չնայած այն..