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 )