Java regulaaravaldiste API kasutamine
Java regulaaravaldise API kasutusvõimalused kirjeldasime loengus. Meelde tuletamiseks võib uurida Java API dokumentatsiooni:
- Regex Tutorial
- java.util.regex.Pattern sisaldab kõige rohkem infot Java regulaaravaldiste süntaksi kohta, muuhulgas kõik täheklasside definitsioonid. Teine asi siin on Pattern.compile kirjeldus, mis võtab ka soovi korral teist argumenti, millega saab käitumist konfigureerida.
- java.util.regex.Matcher klassi kolm meetodit võib üle vaadata, aga enamasti läheb meil siin vaja find ja group, mille kohta on näide allpool.
- Lisaks saab regulaaravaldisi anda ka paljudele sõne klasside meetoditele: matches, replaceAll, replaceFirst ja split.
Kasutusnäide
public static void main(String[] args) { String input = "1, 2, Polizei, 3, 4, Grenadier...\n" + "Jenny, don't change your number, 867 5309.\n" + "666 the number of the Beast. Hell and fire was spawned to be released.\n" + "87, 87 var har du tagit vägen nu?\n" + "Olen su poole teel. Aa-ha-ha-haaaaaaa-haa-haaaaaa. 581C."; Pattern pattern = Pattern.compile("\\d+"); Matcher matcher = pattern.matcher(input); List<Integer> numbers = new ArrayList<>(); while (matcher.find()) { String match = matcher.group(); numbers.add(Integer.valueOf(match)); } System.out.print("Tekstis esinevad arvud: "); System.out.println(numbers); matcher = Pattern.compile("(\\d+) (\\d+)").matcher(input); if (matcher.find()) { System.out.println("Jenny number: " + matcher.group(0)); // = matcher.group() System.out.println("Esimene osa: " + matcher.group(1)); System.out.println("Teine osa: " + matcher.group(2)); } }
Esimene ülesanne
Implementeeri meetod extractAddresses
, mille sisendiks on sõne, millest on vaja regulaaravaldisi kasutades tuvastada aadressid ning luua nendest sõnede list. Aadressideks loeme sõnesid kujul
"<MAAKOND>, <ALEV>, <TÄNAV> <MAJANR>"
või
"<MAAKOND>, <ALEV>, <TÄNAV> <MAJANR>, <TÄPSUSTUS>"
- <MAAKOND> koosneb ühest suurtähega algavast sõnast millele järgneb sõna "maakond".
- <ALEV> koosneb ühest suurtähega sõnast, millele võib (aga ei pruugi) järgneda üks väikese tähega algav sõna.
- <TÄNAV> koosneb ühest suurtähega algavast, millele võib (aga ei pruugi) järgneda üks väikese tähega algav sõna.
- <MAJANR> koosneb mingist ühe- või mitmekohalisest arvust.
- <TÄPSUSTUS> koosneb ühest valikulisest väiketähega sõnast (st seda ei pruugi esineda). Sellele järgneb üks arv (võib olla mitmekohaline).
<MAAKOND>, <ALEV>, <TÄNAV> <MAJANR> näide:
Pärnu maakond, Pärnu linn, Mingi tänav 777
<MAAKOND>, <ALEV>, <TÄNAV> <MAJANR>, <TÄPSUSTUS> näide:
Cumberlandi maakond, Sydney, Wallaby tee 42, akvaarium 1
Teine ülesanne
Implementeeri meetod extractFunctions
. Sisendsõnest on vaja regulaaravaldisi kasutades tuvastada programmeerimiskeeles Python kirjutatud kahe argumendiga funktsioonide definitsioonid ning luua nende funktsioonide nimedest koosnev sõnede list.
Funktsioonid on defineeritud lausetega kujul:
def <funktsiooni nimi>(<esimene argument>,<teine argument>):
Võtmesõna def
ja funktsiooni nime vahel peab olema vähemalt üks whitespace sümbol. Muude lause fragmentide vahel võib, aga ei pruugi, olla whitespace-i. Funktsiooni nimi ja mõlemad argumendid on Pythoni muutujanimed. Need algavad kas alakriipsuga _
või mingi tähega. Esimesele sümbolile järgnevad sümbolid võivad olla lisaks tähtedele ja alakriipsule ka numbrid. Näide sisendist:
"def funktsioon(a,b): …. siin programm … def _a(B,C): … veel … . def FIBO("
Sellise sisendi puhul peaks meetod tagastama listi järgnevate sõnedega:
["funktsioon", "_a"]