spatie in reguliere expressie

Ik heb een vraag, mag ik zeggen dat \tgelijk is aan \s+in reguliere expressie.?
Ik heb enkele regels code:

>>> b = '\tNadya Carson'
>>> c = re.compile(r'\s\s*')
>>> c
<_sre.SRE_Pattern object at 0x02729800>
>>> c.sub('',b)
'NadyaCarson'
>>> c = re.compile(r'\s\s+')
>>> c
<_sre.SRE_Pattern object at 0x027292F0>

Er is tot hier een patroonobject, maar als ik het wil vervangen zonder spatie, wordt nog steeds \t weergegeven in plaats van het te vervangen:

>>> c.sub('',b)
'\tNadya Carson'

Waarom werkt het attribuut sub in dit geval niet? Bedankt.!


Antwoord 1, autoriteit 100%

\tis niet gelijk aan \s+, maar \s+moet overeenkomen met een tabblad (\t).

Het probleem in uw voorbeeld is dat het tweede patroon \s\s+zoekt naar tweeof meer witruimtetekens, en \tis slechts één spatieteken.

Hier zijn enkele voorbeelden die u moeten helpen begrijpen:

>>> result = re.match(r'\s\s+', '\t')
>>> print result
None
>>> result = re.match(r'\s\s+', '\t\t')
>>> print result
<_sre.SRE_Match object at 0x10ff228b8>

\s\s+komt ook overeen met ' \t', '\n\t', ' \n \t \t\n'.

Ook \s\s*is gelijk aan \s+. Beide komen overeen met een of meer witruimtetekens.


Antwoord 2, autoriteit 19%

\s+is niet gelijk aan \tomdat \sniet betekent <space>, maar betekent in plaats daarvan <whitespace>. Een letterlijke spatie (waarvan er soms vier worden gebruikt voor tabbladen, afhankelijk van de toepassing die wordt gebruikt om ze weer te geven) is gewoon . Dat wil zeggen, het raken van de spatiebalk creëert een letterlijke spatie. Dat is niet verwonderlijk.

\s\skomt nooit overeen met een \tomdat sinds \twitruimte is, \spast het. Het komt overeen met \t\t, maar dat komt omdat er twee tekens witruimte zijn (beide tabtekens). Wanneer uw regex \s\s+uitvoert, zoekt het naar één teken witruimte gevolgd door één, twee, drie, of eigenlijk ELK getal meer. Wanneer het uw regex leest, doet het dit:

\s\s+

Debuggex-demo

De \tkomt overeen met de eerste \s, maar wanneer het de tweede raakt, spuugt je regex het weer uit en zegt: “Oh, nee, laat maar.”

Je eerste regex doet dit:

\s\s*

Debuggex-demo

Nogmaals, de \tkomt overeen met uw eerste \s, en wanneer de regex doorgaat, ziet hij dat deze niet overeenkomt met de tweede \s, dus het duurt de ” high road” in plaats daarvan en springt eroverheen. Daarom komt \s\s*overeen, omdat de kwantor *“of nul” bevat. terwijl de kwantor +dat niet doet.


Antwoord 3, autoriteit 12%

mag ik zeggen dat \t gelijk is aan \s+ in reguliere expressies.?

Nee.

\t

Overeenkomen met een tab-teken

\s+

Komt overeen met een “witruimteteken” (spaties, tabs en regeleinden)
Tussen één en onbeperkte keren, zo vaak mogelijk, geven
terug indien nodig (hebzuchtig) «+»


Antwoord 4

Geen sprake van,
\s+ zegt een of meer spaties
MAAR
\t is een van de witruimtes die een keer voorkomen.

Dus , \s+ bevat \t maar vice versa is niet waar.

Other episodes