New In

Boost-alapú reguláris kifejezések

Kiemelt információk

  • Modellválasztás ARIMA és ARFIMA modellekhez

     

  • AIC, BIC és HQIC információs kritériumok

A reguláris kifejezések hatékony eszközök a karakterláncadatokkal való munkához. A Stata 18-ban a Stata reguláris kifejezések még erősebbek és több funkcióval rendelkeznek.

Áttekintés

A reguláris kifejezések a következőkre szolgálnak

  • adatérvényesítés, például annak ellenőrzése, hogy egy telefonszám jól van-e formázva;

     

  • adatkivonatolás, például telefonszámok kivonása egy karakterláncból; és

     

  • adattranszformáció, például a különböző telefonszám-bemenetek normalizálása.

A Stata kétféle reguláris kifejezés függvénykészletet biztosít: a bájtfolyam-alapú regexm(), regexr() és regexs(); és az Unicode-alapú ustrregexm(), ustrregexrf(), ustrregexra() és ustrregexs(). Az Unicode-alapú reguláris kifejezésfüggvények az ICU könyvtárakra épülnek.

A Stata 18-ban a bájtfolyam-alapú függvények frissítve vannak, hogy a Boost könyvtárat használják motorként. A függvények felhasználói verzióvezérlésűek, hogy a régi viselkedés megmaradjon, ha a felhasználó a 17-es verziót adja meg:.

A reguláris kifejezések jó tárgyalása a Stata-ban Asjad Naqvi Stata-útmutatójában található.

A régi implementáció Henry Spencer NFA algoritmusán alapul, és szinte teljesen megegyezik a POSIX.2 szabványban foglaltakkal. A Stata 18-ban található új implementáció több funkcióval rendelkezik. Például az új implementáció támogatja az {n} értéket a reguláris kifejezések pontosan n-szeri megfeleltetésére:

. display regexm("123", "\d{3}")
1

. version 17: display regexm("123", "\d{3}")
0

Egy sor új függvényt adtunk hozzá, amelyek kizárólag a Boost könyvtárat használják:

  • A regexmatch() egy reguláris kifejezés egyezését végzi el egy ASCII karakterlánccal.

     

  • A regexreplace() az első olyan részláncot, amely megfelel egy reguláris kifejezésnek, meghatározott szöveggel helyettesíti.

     

  • regexreplaceall() az összes olyan részláncot, amely megfelel egy reguláris kifejezésnek, meghatározott szöveggel helyettesíti.

     

  • regexcapture() egy korábbi egyezésből származó részkifejezést ad vissza.

     

  • A regexcapturenamed() egy korábbi egyezésből származó, a reguláris kifejezésben egyező nevű csoportnak megfelelő részkifejezést ad vissza.

Lássuk, hogyan működik

Szeretnénk a kormányfők címében szereplő telefonszámokat összevetni és kivonatolni.

A következő szabályokra van szükségünk:

  • A telefonszám a “Phone:” vagy “tel:” után következik.

     

  • Kezdődhet “+” betűvel.

     

  • A “+” után vagy az elején 1-3 nem nulla számjegyből áll.

     

  • Ezután 7 és 32 számjegy, szóköz vagy “-” következhet.

Szeretnénk a kivont telefonszámhoz egy telefon változót generálni, amely nem tartalmazza a “Phone:” vagy “tel:” feliratot, ha a cím megegyezik.

Szeretnénk egy másik változót generálni, a address1-et, hogy a telefonszámot a fentiekben a kivont telefonszámmal helyettesítsük, amelyet a “tel:” követ.

A reguláris kifejezés összetevői a helyi reg makróban a következők:

  • (?:Phone\:[\s]*?|tel\:[\s]*)– a “Phone:” vagy a “tel:” szóközök nélküli vagy néhány szóközös, de a találatot nem tartalmazó találat.

     

  • ([+]{0, 1}[1-9]{1, 3}[0-9\s-]{7,32})– olyan reguláris kifejezés illesztése és rögzítése, amely megfelel a következőknek:

     

    • [+]{0, 1} – kezdődhet “+”-val.

       

    • [1-9]{1, 3} – a “+” után vagy az elején 1-3 nem nulla számjegyet tartalmaz.

       

    • [0-9\s-]{7,32} – ezután 7 és 32 számjegy, szóköz vagy “-” szerepelhet.

Látjuk, hogy a harmadik cím nem tartalmazza sem a “Phone:”, sem a “tel:” szót, és így nem felel meg a reguláris kifejezésnek, így a telefon hiányzik ebből a megfigyelésből.