Überprüfen Sie, ob die Zeichenfolge mit dem Muster übereinstimmt
Lesezeit: 4 Minuten
DanielTA
Wie überprüfe ich, ob eine Zeichenfolge diesem Muster entspricht?
Großbuchstabe, Zahl(en), Großbuchstabe, Zahl(en)…
Beispiel: Diese würden übereinstimmen:
A1B2
B10L1
C1N200J1
Diese würden nicht (‘^’ weist auf ein Problem hin)
a1B2
^
A10B
^
AB400
^
Könnten Sie bitte genauer erklären, warum es ein Problem ist?
– John Woo
26. September ’12 um 5:29
^([A-Z]d+){1,}$ so was?
– Passanten
26. September ’12 um 5:30
In Ihrem dritten Beispiel sollte das Problem bei liegen B und nicht mit A.
– Burhan Khalid
26. September ’12 um 5:33
vielleicht ist es ein Tippfehler bei dem Problem. beide A und B Sind Kleinbuchstaben richtig? A10b und aB400?
– John Woo
26. September ’12 um 5:34
@Burhan, das Problem liegt bei A, weil B Zahlen daneben hat und A nicht
– DanielTA
26. September ’12 um 5:39
CrazyCasta
import re
pattern = re.compile("^([A-Z][0-9]+)+$")
pattern.match(string)
Ab den Dokumenten re.match: If zero or more characters at the beginning of string match the regular expression pattern. Ich habe nur etwa 30 Minuten damit verbracht, zu verstehen, warum ich etwas am Ende einer Zeichenfolge nicht finden konnte. Scheint nicht möglich zu sein mit match, ist es? Dafür, re.search(pattern, my_string) funktioniert aber.
– conradkleinespel
11. November ’16 um 15:52
@conradk Ja, du hast recht, ich glaube da ist sowas wie impliziert ^ am Anfang, wenn Sie verwenden match. Ich denke, es ist etwas komplizierter als diese sehr einfache Erklärung, aber ich bin nicht klar. Sie haben jedoch Recht, dass es am Anfang der Zeichenfolge beginnt.
– CrazyCasta
11. November ’16 um 20:10 Uhr
Ich habe deine Antwort bearbeitet, weil es nur mit Sinn macht search() in diesem Zusammenhang.
– Robo Robok
21. Februar ’21 um 12:16
Ja, aber das will der Fragesteller. Ich bin mir nicht sicher, was du mit “nur sinnvoll mit” meinst search()“. Es funktioniert perfekt mit Streichholz.
– CrazyCasta
5. September ’21 um 21:03
nehem
Einzeiler: re.match(r"pattern", string) # No need to compile
import re
>>> if re.match(r"hello[0-9]+", 'hello1'):
... print('Yes')
...
Yes
Sie können es bewerten als bool wenn benötigt
>>> bool(re.match(r"hello[0-9]+", 'hello1'))
True
Das ist seltsam. Warum können Sie verwenden? re.match im Rahmen einer if, aber du musst verwenden bool wenn du es woanders verwendest?
– LondonRob
13. März ’18 um 13:59
Vorsichtig mit re.match. Es stimmt nur am Anfang einer Zeichenfolge überein. Schaut mal rein re.search stattdessen.
– LondonRob
13. März ’18 um 14:02
@LondonRob wahrscheinlich weil if prüft, ob die Übereinstimmung nicht vorhanden ist None.
– Dennis
18. März ’19 um 13:17
Es besteht ein großer Bedarf an Kompilierung, um sicherzustellen, dass die regulären Ausdrücke keine Fehler wie Fehler mit ungültigem Zeichenbereich enthalten
– Suh Fangmbeng
6. Mai ’20 um 17:10
@SuhFangmbeng Compilation ist nützlich, wenn dasselbe re wird an mehr als einer Stelle verwendet, um die Effizienz zu verbessern. In Bezug auf Fehler .match würde den gleichen Fehler was werfen .compile tut. Es ist absolut sicher zu verwenden.
– nehem
6. Mai ’20 um 21:58 Uhr
sumeet agrawal
Bitte versuche folgendes:
import re
name = ["A1B1", "djdd", "B2C4", "C2H2", "jdoi","1A4V"]
# Match names.
for element in name:
m = re.match("(^[A-Z]d[A-Z]d)", element)
if m:
print(m.groups())
Dies ist der einzige Fall, der die Übereinstimmung zurückgibt, die zum Abrufen von Gruppen erforderlich ist. Beste Antwort meiner Meinung nach.
– Rick Smith
12. Dezember ’16 um 20:59
Marc Cohen
import re
import sys
prog = re.compile('([A-Z]d+)+')
while True:
line = sys.stdin.readline()
if not line: break
if prog.match(line):
print 'matched'
else:
print 'not matched'
Reguläre Ausdrücke machen es einfach …
[A-Z] entspricht genau einem Zeichen zwischen A und Z
d+ stimmt mit einer oder mehreren Ziffern überein
() Dinge gruppieren (und auch Dinge zurückgeben … aber jetzt nur daran denken, sie zu gruppieren)
+ wählt 1 oder mehr aus
Knien-vor-ZOD
import re
ab = re.compile("^([A-Z]{1}[0-9]{1})+$")
ab.match(string)
Ich glaube, das sollte für einen funktionieren Großbuchstaben, Zahl Muster.
kryptisch
Wie in den Kommentaren angegeben, verwenden alle diese Antworten re.match stimmt implizit am Anfang der Zeichenfolge überein. re.search wird benötigt, wenn Sie auf die gesamte Zeichenfolge verallgemeinern möchten.
import re
pattern = re.compile("([A-Z][0-9]+)+")
# finds match anywhere in string
bool(re.search(pattern, 'aA1A1')) # True
# matches on start of string, even though pattern does not have ^ constraint
bool(re.match(pattern, 'aA1A1')) # False
Credit: @LondonRob und @conradkleinespel in den Kommentaren.
.
1853500cookie-checkÜberprüfen Sie, ob die Zeichenfolge mit dem Muster übereinstimmtyes
Könnten Sie bitte genauer erklären, warum es ein Problem ist?
– John Woo
26. September ’12 um 5:29
^([A-Z]d+){1,}$
so was?– Passanten
26. September ’12 um 5:30
In Ihrem dritten Beispiel sollte das Problem bei liegen
B
und nicht mitA
.– Burhan Khalid
26. September ’12 um 5:33
vielleicht ist es ein Tippfehler bei dem Problem. beide
A
undB
Sind Kleinbuchstaben richtig?A10b
undaB400
?– John Woo
26. September ’12 um 5:34
@Burhan, das Problem liegt bei A, weil B Zahlen daneben hat und A nicht
– DanielTA
26. September ’12 um 5:39