Regex problém řešit dvě podmínky

hlasů
-2

Tady je ten problém. Musím napsat regulární výraz, který upozorňuje všechny položky v následujícím textu:

AAAAB

ale ne v tomto textu:

ABABA

Moje první myšlenka byla použít A?B?, ale to nepomohlo. Jakákoliv pomoc / vysvětlení by se moc líbí

Položena 27/11/2018 v 17:56
zdroj uživatelem
V jiných jazycích...                            


3 odpovědí

hlasů
2

Za předpokladu, že budete chtít, aby odpovídaly pouze AAAAB, bez ohledu na to, kde je vzhledem k ostatním textu, pak můžete použít regulární výraz:

A{4}B

Zde Amatchs znak A, {4}odpovídá 4 z předcházejících bodů (takže v tomto případě řetězec AAAA) a Bodpovídá jeden výskyt znaku B, tak dlouho, jak to přichází po sekvenci znaků AAAA. To nebude odpovídat pořadí ABABA.

Odpovězeno 27/11/2018 v 18:04
zdroj uživatelem

hlasů
0

Předpokládám, že budete chtít, aby odpovídaly nejen čtyřikrát a jednou B , nýbrž:

  • Neprázdná sekvence A.
  • Pak neprázdná sekvence B.
  • A nic víc. Ani před ani po něm nemůže dojít k jakékoliv jiné písmeno / číslici.

V případě, že výše uvedený vzorec, je v pořádku, použití:

^A+B+$

Všimněte si, využití ^a $kotev.

Dalším předpokladem: Zápas výše sekvenci jako jediné slovo , tedy tam může být další „obklopující“ text, ale žádné písmeno nebo číslice mohou ubytovat v sousedním postavení tohoto řetězce (ačkoli to může být oddělena mezerou).

V takovém případě užití:

\bA+B+\b

Tentokrát místo ^a $kotvy používáme \b- slovo hraniční značky.

Odpovězeno 27/11/2018 v 20:10
zdroj uživatelem

hlasů
0

Pokud je váš problém je jen, že budete chtít případy, kdy se opakovaná před B, to je dost jednoduché:

import re
match = re.compile('AA+?B')
match.match('AAAAB') #Finds a match
match.match('ABAB') #Finds no match

Pokud to není to, co hledáte, budete muset být konkrétnější o své očekávané produkce, a možná dát více příkladů.

Odpovězeno 27/11/2018 v 18:02
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more