Quantor
Komm, lass uns unser Verständnis von regulären Ausdrücken weiter vertiefen. In diesem Teil werden wir Quantifizierer verstehen und warum wir Quantifizierer verwenden. Wenn Sie Dutzende oder Hunderte von Zeichen zuordnen möchten, müssen Sie dies tun Schreiben Sie sie einzeln? Es erschienen also Quantoren.
Das Lexikon der Quantoren lautet: {min,max}. min und max sind beide nichtnegative ganze Zahlen. Wenn das Komma vorhanden ist und max weggelassen wird, gibt es für max keine Begrenzung. Wenn sowohl Komma als auch Max weggelassen werden, wiederholen Sie die Min-Zeiten. Beispielsweise stimmt b[1-9][0-9]{3}b mit Zahlen zwischen 1000 und 9999 überein („b“ steht für Wortgrenzen), während b[1-9][0-9]{ 2,4} b, entspricht einer Zahl zwischen 100 und 99999.
Sehen wir uns unten ein Beispiel an, bei dem 4 bis 7 Buchstaben in der Zeichenfolge auf Englisch abgeglichen werden
import re a = 'java*&39android##@@python' # 数量词 findall = re.findall('[a-z]{4,7}', a) print(findall)
Ausgabeergebnis:
['java', 'android', 'python']
Beachten Sie, dass es welche gibt Gierig und nicht gierig. Werfen wir also zunächst einen Blick auf die zugehörigen Konzepte:
Gieriger Modus: Seine Eigenschaft besteht darin, die gesamte Zeichenfolge auf einmal zu lesen. Wenn sie nicht übereinstimmt, spucken Sie das Zeichen ganz rechts aus und passen Sie es dann erneut an, bis ein übereinstimmendes Zeichen gefunden wird gefunden wird. Die Länge der Zeichenfolge bzw. Zeichenkette beträgt 0. Sein Zweck besteht darin, so viele Zeichen wie möglich zu lesen, sodass er sofort zurückkehrt, wenn er die erste Übereinstimmung liest.
Lazy-Modus: Sein Merkmal besteht darin, auf der linken Seite der Zeichenfolge zu beginnen und zu versuchen, die Zeichen in der Zeichenfolge zu lesen. Wenn dies fehlschlägt, wird ein weiteres Zeichen gelesen und erneut abgeglichen Wenn eine Übereinstimmung gefunden wird, wird die übereinstimmende Zeichenfolge zurückgegeben und dann erneut abgeglichen, bis das Ende der Zeichenfolge erreicht ist.
Das obige Beispiel ist gierig. Was ist, wenn Sie den nicht gierigen Modus verwenden möchten?
Wenn Sie Non-Greedy verwenden möchten, fügen Sie ein ? hinzu. Das obige Beispiel wird wie folgt geändert:
import re a = 'java*&39android##@@python' # 贪婪与非贪婪 re_findall = re.findall('[a-z]{4,7}?', a) print(re_findall)
Das Ausgabeergebnis lautet wie folgt:
['java', 'andr', 'pyth']
Wie möglich Aus den Ausgabeergebnissen ist ersichtlich, dass Android nur außer andr druckt und Python nur außer pyth druckt, da hier der Lazy-Modus verwendet wird.
Natürlich gibt es einige Sonderzeichen, die auch Mengen ausdrücken können, wie zum Beispiel:
?:告诉引擎匹配前导字符 0 次或 1 次 +:告诉引擎匹配前导字符 1 次或多次 *:告诉引擎匹配前导字符 0 次或多次
Um die Wissenspunkte in diesem Teil zusammenzufassen, handelt es sich um die folgende Tabelle:
贪 婪 | 惰 性 | 描 述 |
? | ?? | 零次或一次出现,等价于{0,1} |
? | 一次或多次出现 ,等价于{1,} | |
* | *? | 零次或多次出现 ,等价于{0,} |
{n} | {n}? | 恰好 n 次出现 |
{n,m} | {n,m}? | 至少 n 次枝多 m 次出现 |
{n,} | {n,}? | 至少 n 次出现 |