Snažím sa porovnať nasledujúci reťazec
"name type this is a comment"
Meno a typ sú určite tam. Komentár môže alebo nemusí existovať. Snažím sa to uložiť do premenných n, ta c.
val nameTypeComment = """^(w+s+){2}(?:[w+s*)*(,,]+)"""
str match { case nameType(n, t, c) => print(n,t,c) }
To je to, čo mám, ale zdá sa, že nefunguje. Cení sa akejkoľvek pomoci.
val nameType = """^(w+)s+([w)(,]+)""".r
Toto však funguje, keď som sa snažil pracovať s reťazcami iba s menom a typom a bez komentára, čo je skupina slov, ktorá tam môže alebo nemusí byť.
odpovede:
0 pre odpoveď č. 1Poznač si to ^(w+s+){2}(?:[w+s*)*(,,]+)
regex obsahuje iba 1 zachytávajúcu skupinu ((w+s+)
), zatiaľ čo v match
blok.
Na ^(w+)s+([w)(,]+)
obsahuje iba 2 zachytávajúce skupiny: (w+)
a ([w)(,]+)
.
Aby váš kód fungoval, musíte definovať 3zachytávajúce skupiny. Tiež nie je jasné, čo sú oddeľovače, dovoľte mi predpokladať, že prvé dve polia sú iba 1 alebo viac alfanumerických / podčiarkovacích symbolov oddelených 1 alebo viacerými medzerami. Komentár je niečo po 2 prvých poliach.
Potom použite
val s = "name type this comment a comment"
val nameType = """(w+)s+(w+)s+(.*)""".r
val res = s match {
case nameType(n, t, c) => print(n,t,c)
case _ => print("NONE")
}
Pozrite si online demo
Všimnite si, že musíme zostaviť regulárny objekt, dávajte pozor na .r
po regulárnom vzore nameType
.
Všimnite si, že vzor vnútri match
je kotvená štandardne je to začiatok kotvy strún ^
možno vynechať.
Je tiež dobré pridať case _
na definovanie správania, keď sa nenájde žiadna zhoda.