/ / Python Regex pre koniec riadku - python, regex

Python Regex pre koniec riadku - python, regex

Snažím sa napísať regulárny výraz, ktorý pridá medzeru pred a za bodkou. Chcem to však iba v prípade, že za bodkou je medzera alebo koniec riadku.

Nemôžem to však urobiť pre prípady konca riadku.

Eg.

I want a hotel. >> I want a hotel .
my email is zob@gmail.com >> my email is zob@gmail.com
I have to play. bye! >> I have to play . bye!

Nasleduje môj kód:

# If "Dot and space" after word or number put space before and after
utterance = re.sub(r"(?<=[a-z0-9])[.][ $]"," . ",utterance)

Ako opravím svoj regulárny výraz, aby som sa ubezpečil, že funguje aj môj prvý príklad, vyskúšal som vloženie znaku $ do hranatej zátvorky, ale nefunguje to.

odpovede:

1 pre odpoveď č. 1

[ $] definuje a trieda znakov pozostávajúcich z medzery a znaku dolára, takže sa zhoduje s medzerou alebo dolárom (doslova). Na vyrovnanie medzery alebo konca riadku použite ( |$) (v tomto prípade, $ zachováva to osobitný význam.


0 pre odpoveď č. 2

Hlavnou otázkou je to $ vnútri znakovej triedy sa označuje literál $ symbol, stačí skupinový konštrukt tu.

Navrhujem použiť nasledujúci kód:

import re
regex = r"([^W_]).(?:s+|$)"
ss = ["I want a hotel.","my email is zob@gmail.com", "I have to play. bye!"]
for s in ss:
result = re.sub(regex, r"1 . ", s).rstrip()
print(result)

Pozrite si Python demo

podrobnosti:

  • ([^W_]) - Skupina 1 zhodujúca sa s akýmkoľvek písmenom alebo číslicou
  • . - doslova bodka
  • (?:s+|$) - zoskupenie, ktoré sa zhoduje s 1+ medzerami alebo koncami strunovej kotvy (tu, $ zodpovedá koncu reťazca.)

Na rstrip odstráni koncový priestor pridaný počas výmeny.

Ak používate Python 3, [^W_] predvolene sa zhodujú všetky písmená a číslice Unicode. V Pythone 2 re.U flag umožní toto správanie.

Poznač si to s+ v poslednom (?:s+|$) „zmrští“ viac medzier na 1 miesto.


0 pre odpoveď č. 3

Použite výraz hľadáčika (?=) nájsť . za ktorým nasleduje medzera alebo koniec riadku n:

utterance = re.sub("\.(?= )|\.(?=n)", " . ", utterance )