/ / Liczba regex w Pythonie, patrząc za - python, regex

Liczba wyrażeń regularnych Pythona, patrząc wstecz - python, regex

Wyodrębniam liczby w takim formacie.

  • AB1234
  • AC1234
  • AD1234

Jak widzicie, A jest zawsze tam, a drugi char wyklucza ". Piszę poniżej kod, żeby wyodrębnić numer.

re.search(r"(?<=A[^"])d*",input)

Ale napotkałem błąd.

Look-behind wymaga wzoru o stałej szerokości

Czy istnieje wygodny sposób na wyodrębnianie liczb? Teraz wiem, jak wyszukiwać dwa razy, aby je zdobyć. Dzięki za to.

Uwaga A jest wzorcem, w rzeczywistości A jest światem w długim łańcuchu.

Odpowiedzi:

3 dla odpowiedzi № 1

W tym przykładzie działa wyrażenie regularne, więc zgaduję, że twój wzorzec ma dopasowania o zmiennej szerokości znaków (*, +itp.). Niestety, regex look behinds nie obsługuje tych. Co mogę zasugerować jako alternatywę, należy użyć grupy przechwytywania i wyodrębnić pasujący ciąg znaków -

m = re.search(r"AD+(d+)", s)
if m:
r = m.group(1)

Detale

A      # your word
D+    # anything that is not a digit
(      # capture group
d+    # 1 or more digits
)

Jeśli chcesz zająć się podwójnymi cudzysłowami, możesz wprowadzić niewielką modyfikację wyrażenia regularnego, dołączając klasę znaków -

r"A[^d"]+(d+)"

0 dla odpowiedzi nr 2

Zamiast tego Tye używa tego wyrażenia regularnego:

re.search(r"(?=A[^"]d*)d*",input)