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 № 1W 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)