Vyberám čísla v takomto formáte.
- AB1234
- AC1234
- AD1234
Ako vidíš, A
je vždy tam a druhý char vylučuje "
, Napíšem nižšie kód na extrahovanie čísla.
re.search(r"(?<=A[^"])d*",input)
Ale vyskytla som sa chyba.
look-behind vyžaduje model s pevnou šírkou
Takže existuje nejaký vhodný spôsob, ako získať čísla? Teraz viem, ako dvakrát vyhľadávať, aby ste ich získali.Vďaka vopred.
Poznámka A je vzor, v skutočnosti A je svet v dlhom reťazci.
odpovede:
3 pre odpoveď č. 1Regex vo vašom príklade funguje, takže sa domnievam, že váš skutočný vzor má premennú šírku znakov (*
, +
, atď). Bohužiaľ, regex look behinds ich nepodporuje. Čo môžem navrhnúť ako alternatívu, je použiť skupinu zachytenia a extrahovať zodpovedajúci reťazec -
m = re.search(r"AD+(d+)", s)
if m:
r = m.group(1)
podrobnosti
A # your word
D+ # anything that is not a digit
( # capture group
d+ # 1 or more digits
)
Ak sa chcete postarať o dvojité úvodzovky, môžete urobiť miernu úpravu regulárneho výrazu tým, že zahrniete triedu znakov -
r"A[^d"]+(d+)"
0 pre odpoveď č. 2
Tye namiesto toho používa tento regex:
re.search(r"(?=A[^"]d*)d*",input)