- class QRegularExpression#
The
QRegularExpression
class provides pattern matching using regular expressions. More…Synopsis#
Methods#
def
__init__()
def
captureCount()
def
errorString()
def
globalMatch()
def
isValid()
def
match()
def
matchView()
def
__ne__()
def
__eq__()
def
optimize()
def
pattern()
def
patternOptions()
def
setPattern()
def
swap()
Static functions#
def
escape()
def
fromWildcard()
Note
This documentation may contain snippets that were automatically translated from C++ to Python. We always welcome contributions to the snippet translation. If you see an issue with the translation, you can also let us know by creating a ticket on https:/bugreports.qt.io/projects/PYSIDE
Detailed Description#
Warning
This section contains snippets that were automatically translated from C++ to Python and may contain errors.
Regular expressions, or regexps, are a very powerful tool to handle strings and texts. This is useful in many contexts, e.g.,
Validation
A regexp can test whether a substring meets some criteria, e.g. is an integer or contains no whitespace.
Searching
A regexp provides more powerful pattern matching than simple substring matching, e.g., match one of the words mail, letter or correspondence, but none of the words email, mailman, mailer, letterbox, etc.
Search and Replace
A regexp can replace all occurrences of a substring with a different substring, e.g., replace all occurrences of & with & except where the & is already followed by an amp;.
String Splitting
A regexp can be used to identify where a string should be split apart, e.g. splitting tab-delimited strings.
This document is by no means a complete reference to pattern matching using regular expressions, and the following parts will require the reader to have some basic knowledge about Perl-like regular expressions and their pattern syntax.
Good references about regular expressions include:
Mastering Regular Expressions (Third Edition) by Jeffrey E. F. Friedl, ISBN 0-596-52812-4;
the pcrepattern(3) man page, describing the pattern syntax supported by PCRE (the reference implementation of Perl-compatible regular expressions);
the Perl’s regular expression documentation and the Perl’s regular expression tutorial .
Introduction#
QRegularExpression
implements Perl-compatible regular expressions. It fully supports Unicode. For an overview of the regular expression syntax supported byQRegularExpression
, please refer to the aforementioned pcrepattern(3) man page. A regular expression is made up of two things: a pattern string and a set of pattern options that change the meaning of the pattern string.You can set the pattern string by passing a string to the
QRegularExpression
constructor:re = QRegularExpression("a pattern")
This sets the pattern string to
a pattern
. You can also use thesetPattern()
function to set a pattern on an existingQRegularExpression
object:re = QRegularExpression() re.setPattern("another pattern")
Note that due to C++ literal strings rules, you must escape all backslashes inside the pattern string with another backslash:
# matches two digits followed by a space and a word re = QRegularExpression("\\d\\d \\w+") # matches a backslash re2 = QRegularExpression("\\\\")
Alternatively, you can use a raw string literal , in which case you don’t need to escape backslashes in the pattern, all characters between
R"(...)"
are considered raw characters. As you can see in the following example, this simplifies writing patterns:# matches two digits followed by a space and a word re = QRegularExpression(R"(\d\d \w+)")
The
pattern()
function returns the pattern that is currently set for aQRegularExpression
object:re = QRegularExpression("a third pattern") pattern = re.pattern() # pattern == "a third pattern"
Pattern Options#
The meaning of the pattern string can be modified by setting one or more pattern options. For instance, it is possible to set a pattern to match case insensitively by setting the
CaseInsensitiveOption
.You can set the options by passing them to the
QRegularExpression
constructor, as in:# matches "Qt rocks", but also "QT rocks", "QT ROCKS", "qT rOcKs", etc. re = QRegularExpression("Qt rocks", QRegularExpression.CaseInsensitiveOption)
Alternatively, you can use the
setPatternOptions()
function on an existing QRegularExpressionObject:re = QRegularExpression("^\\d+$") re.setPatternOptions(QRegularExpression.MultilineOption) # re matches any line in the subject string that contains only digits (but at least one)
It is possible to get the pattern options currently set on a
QRegularExpression
object by using thepatternOptions()
function:re = QRegularExpression("^two.words$", QRegularExpression.MultilineOption() | QRegularExpression.DotMatchesEverythingOption) QRegularExpression.PatternOptions options = re.patternOptions() # options == QRegularExpression::MultilineOption | QRegularExpression::DotMatchesEverythingOption
Please refer to the
PatternOption
enum documentation for more information about each pattern option.Match Type and Match Options#
The last two arguments of the
match()
and theglobalMatch()
functions set the match type and the match options. The match type is a value of theMatchType
enum; the “traditional” matching algorithm is chosen by using theNormalMatch
match type (the default). It is also possible to enable partial matching of the regular expression against a subject string: see thepartial matching
section for more details.The match options are a set of one or more
MatchOption
values. They change the way a specific match of a regular expression against a subject string is done. Please refer to theMatchOption
enum documentation for more details.Normal Matching#
In order to perform a match you can simply invoke the
match()
function passing a string to match against. We refer to this string as the subject string. The result of thematch()
function is aQRegularExpressionMatch
object that can be used to inspect the results of the match. For instance:# match two digits followed by a space and a word re = QRegularExpression("\\d\\d \\w+") match = re.match("abc123 def") hasMatch = match.hasMatch() # true
If a match is successful, the (implicit) capturing group number 0 can be used to retrieve the substring matched by the entire pattern (see also the section about
extracting captured substrings
):re = QRegularExpression("\\d\\d \\w+") match = re.match("abc123 def") if match.hasMatch(): matched = match.captured(0) # matched == "23 def" # ...
It’s also possible to start a match at an arbitrary offset inside the subject string by passing the offset as an argument of the
match()
function. In the following example"12 abc"
is not matched because the match is started at offset 1:re = QRegularExpression("\\d\\d \\w+") match = re.match("12 abc 45 def", 1) if match.hasMatch(): matched = match.captured(0) # matched == "45 def" # ...
Extracting captured substrings#
The
QRegularExpressionMatch
object contains also information about the substrings captured by the capturing groups in the pattern string. Thecaptured()
function will return the string captured by the n-th capturing group:re = QRegularExpression("^(\\d\\d)/(\\d\\d)/(\\d\\d\\d\\d)$") match = re.match("08/12/1985") if match.hasMatch(): day = match.captured(1) # day == "08" month = match.captured(2) # month == "12" year = match.captured(3) # year == "1985" # ...
Capturing groups in the pattern are numbered starting from 1, and the implicit capturing group 0 is used to capture the substring that matched the entire pattern.
It’s also possible to retrieve the starting and the ending offsets (inside the subject string) of each captured substring, by using the
capturedStart()
and thecapturedEnd()
functions:re = QRegularExpression("abc(\\d+)def") match = re.match("XYZabc123defXYZ") if match.hasMatch(): startOffset = match.capturedStart(1) # startOffset == 6 endOffset = match.capturedEnd(1) # endOffset == 9 # ...
All of these functions have an overload taking a
QString
as a parameter in order to extract named captured substrings. For instance:re = QRegularExpression("^(?\\d\\d\\d\\d)$") match = re.match("08/12/1985") if match.hasMatch(): date = match.captured("date") # date == "08" month = match.captured("month") # month == "12" year = match.captured("year") # year == 1985
Global Matching#
Global matching is useful to find all the occurrences of a given regular expression inside a subject string. Suppose that we want to extract all the words from a given string, where a word is a substring matching the pattern
\w+
.globalMatch
returns aQRegularExpressionMatchIterator
, which is a Java-like forward iterator that can be used to iterate over the results. For instance:re = QRegularExpression("(\\w+)") i = re.globalMatch("the quick fox")
Since it’s a Java-like iterator, the
QRegularExpressionMatchIterator
will point immediately before the first result. Every result is returned as aQRegularExpressionMatch
object. ThehasNext()
function will return true if there’s at least one more result, andnext()
will return the next result and advance the iterator. Continuing from the previous example:words = QStringList() while i.hasNext(): match = i.next() word = match.captured(1) words << word # words contains "the", "quick", "fox"
You can also use
peekNext()
to get the next result without advancing the iterator.It is also possible to simply use the result of
globalMatch
in a range-based for loop, for instance like this:# using a raw string literal, R"(raw_characters)", to be able to use "\w" # without having to escape the backslash as "\\w" re = QRegularExpression(R"(\w+)") subject = QString("the quick fox") for match in re.globalMatch(subject): # ...
It is possible to pass a starting offset and one or more match options to the
globalMatch()
function, exactly like normal matching withmatch()
.Partial Matching#
A partial match is obtained when the end of the subject string is reached, but more characters are needed to successfully complete the match. Note that a partial match is usually much more inefficient than a normal match because many optimizations of the matching algorithm cannot be employed.
A partial match must be explicitly requested by specifying a match type of
PartialPreferCompleteMatch
orPartialPreferFirstMatch
when callingmatch
orglobalMatch
. If a partial match is found, then calling thehasMatch()
function on theQRegularExpressionMatch
object returned bymatch()
will returnfalse
, buthasPartialMatch()
will returntrue
.When a partial match is found, no captured substrings are returned, and the (implicit) capturing group 0 corresponding to the whole match captures the partially matched substring of the subject string.
Note that asking for a partial match can still lead to a complete match, if one is found; in this case,
hasMatch()
will returntrue
andhasPartialMatch()
false
. It never happens that aQRegularExpressionMatch
reports both a partial and a complete match.Partial matching is mainly useful in two scenarios: validating user input in real time and incremental/multi-segment matching.
Validating user input#
Suppose that we would like the user to input a date in a specific format, for instance “MMM dd, yyyy”. We can check the input validity with a pattern like:
^(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) \d\d?, \d\d\d\d$
(This pattern doesn’t catch invalid days, but let’s keep it for the example’s purposes).
We would like to validate the input with this regular expression while the user is typing it, so that we can report an error in the input as soon as it is committed (for instance, the user typed the wrong key). In order to do so we must distinguish three cases:
the input cannot possibly match the regular expression;
the input does match the regular expression;
the input does not match the regular expression right now, but it will if more characters will be added to it.
Note that these three cases represent exactly the possible states of a QValidator (see the QValidator::State enum).
In particular, in the last case we want the regular expression engine to report a partial match: we are successfully matching the pattern against the subject string but the matching cannot continue because the end of the subject is encountered. Notice, however, that the matching algorithm should continue and try all possibilities, and in case a complete (non-partial) match is found, then this one should be reported, and the input string accepted as fully valid.
This behavior is implemented by the
PartialPreferCompleteMatch
match type. For instance:pattern = QString("^(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) \\d\\d?, \\d\\d\\d\\d$") re = QRegularExpression(pattern) input = QString("Jan 21,") match = re.match(input, 0, QRegularExpression.PartialPreferCompleteMatch) hasMatch = match.hasMatch() # false hasPartialMatch = match.hasPartialMatch() # true
If matching the same regular expression against the subject string leads to a complete match, it is reported as usual:
input = QString("Dec 8, 1985") match = re.match(input, 0, QRegularExpression.PartialPreferCompleteMatch) hasMatch = match.hasMatch() # true hasPartialMatch = match.hasPartialMatch() # false
Another example with a different pattern, showing the behavior of preferring a complete match over a partial one:
re = QRegularExpression("abc\\w+X|def") match = re.match("abcdef", 0, QRegularExpression.PartialPreferCompleteMatch) hasMatch = match.hasMatch() # true hasPartialMatch = match.hasPartialMatch() # false captured = match.captured(0) # captured == "def"
In this case, the subpattern
abc\\w+X
partially matches the subject string; however, the subpatterndef
matches the subject string completely, and therefore a complete match is reported.If multiple partial matches are found when matching (but no complete match), then the
QRegularExpressionMatch
object will report the first one that is found. For instance:re = QRegularExpression("abc\\w+X|defY") match = re.match("abcdef", 0, QRegularExpression.PartialPreferCompleteMatch) hasMatch = match.hasMatch() # false hasPartialMatch = match.hasPartialMatch() # true captured = match.captured(0) # captured == "abcdef"
Incremental/multi-segment matching#
Incremental matching is another use case of partial matching. Suppose that we want to find the occurrences of a regular expression inside a large text (that is, substrings matching the regular expression). In order to do so we would like to “feed” the large text to the regular expression engines in smaller chunks. The obvious problem is what happens if the substring that matches the regular expression spans across two or more chunks.
In this case, the regular expression engine should report a partial match, so that we can match again adding new data and (eventually) get a complete match. This implies that the regular expression engine may assume that there are other characters beyond the end of the subject string. This is not to be taken literally – the engine will never try to access any character after the last one in the subject.
QRegularExpression
implements this behavior when using thePartialPreferFirstMatch
match type. This match type reports a partial match as soon as it is found, and other match alternatives are not tried (even if they could lead to a complete match). For instance:re = QRegularExpression("abc|ab") match = re.match("ab", 0, QRegularExpression.PartialPreferFirstMatch) hasMatch = match.hasMatch() # false hasPartialMatch = match.hasPartialMatch() # true
This happens because when matching the first branch of the alternation operator a partial match is found, and therefore matching stops, without trying the second branch. Another example:
re = QRegularExpression("abc(def)?") match = re.match("abc", 0, QRegularExpression.PartialPreferFirstMatch) hasMatch = match.hasMatch() # false hasPartialMatch = match.hasPartialMatch() # true
This shows what could seem a counterintuitive behavior of quantifiers: since
?
is greedy, then the engine tries first to continue the match after having matched"abc"
; but then the matching reaches the end of the subject string, and therefore a partial match is reported. This is even more surprising in the following example:re = QRegularExpression("(abc)*") match = re.match("abc", 0, QRegularExpression.PartialPreferFirstMatch) hasMatch = match.hasMatch() # false hasPartialMatch = match.hasPartialMatch() # true
It’s easy to understand this behavior if we remember that the engine expects the subject string to be only a substring of the whole text we’re looking for a match into (that is, how we said before, that the engine assumes that there are other characters beyond the end of the subject string).
Since the
*
quantifier is greedy, then reporting a complete match could be an error, because after the current subject"abc"
there may be other occurrences of"abc"
. For instance, the complete text could have been “abcabcX”, and therefore the right match to report (in the complete text) would have been"abcabc"
; by matching only against the leading"abc"
we instead get a partial match.Error Handling#
It is possible for a
QRegularExpression
object to be invalid because of syntax errors in the pattern string. TheisValid()
function will return true if the regular expression is valid, or false otherwise:invalidRe = QRegularExpression("(unmatched|parenthesis") isValid = invalidRe.isValid() # false
You can get more information about the specific error by calling the
errorString()
function; moreover, thepatternErrorOffset()
function will return the offset inside the pattern stringinvalidRe = QRegularExpression("(unmatched|parenthesis") if not invalidRe.isValid(): errorString = invalidRe.errorString() # errorString == "missing )" errorOffset = invalidRe.patternErrorOffset() # errorOffset == 22 # ...
If a match is attempted with an invalid
QRegularExpression
, then the returnedQRegularExpressionMatch
object will be invalid as well (that is, itsisValid()
function will return false). The same applies for attempting a global match.Unsupported Perl-compatible Regular Expressions Features#
QRegularExpression
does not support all the features available in Perl-compatible regular expressions. The most notable one is the fact that duplicated names for capturing groups are not supported, and using them can lead to undefined behavior.This may change in a future version of Qt.
Debugging Code that Uses QRegularExpression#
QRegularExpression
internally uses a just in time compiler (JIT) to optimize the execution of the matching algorithm. The JIT makes extensive usage of self-modifying code, which can lead debugging tools such as Valgrind to crash. You must enable all checks for self-modifying code if you want to debug programs usingQRegularExpression
(for instance, Valgrind’s--smc-check
command line option). The downside of enabling such checks is that your program will run considerably slower.To avoid that, the JIT is disabled by default if you compile Qt in debug mode. It is possible to override the default and enable or disable the JIT usage (both in debug or release mode) by setting the
QT_ENABLE_REGEXP_JIT
environment variable to a non-zero or zero value respectively.- class PatternOption#
(inherits
enum.Flag
) The PatternOption enum defines modifiers to the way the pattern string should be interpreted, and therefore the way the pattern matches against a subject string.Constant
Description
QRegularExpression.NoPatternOption
No pattern options are set.
QRegularExpression.CaseInsensitiveOption
The pattern should match against the subject string in a case insensitive way. This option corresponds to the /i modifier in Perl regular expressions.
QRegularExpression.DotMatchesEverythingOption
The dot metacharacter (
.
) in the pattern string is allowed to match any character in the subject string, including newlines (normally, the dot does not match newlines). This option corresponds to the/s
modifier in Perl regular expressions.QRegularExpression.MultilineOption
The caret (
^
) and the dollar ($
) metacharacters in the pattern string are allowed to match, respectively, immediately after and immediately before any newline in the subject string, as well as at the very beginning and at the very end of the subject string. This option corresponds to the/m
modifier in Perl regular expressions.QRegularExpression.ExtendedPatternSyntaxOption
Any whitespace in the pattern string which is not escaped and outside a character class is ignored. Moreover, an unescaped sharp (#) outside a character class causes all the following characters, until the first newline (included), to be ignored. This can be used to increase the readability of a pattern string as well as put comments inside regular expressions; this is particularly useful if the pattern string is loaded from a file or written by the user, because in C++ code it is always possible to use the rules for string literals to put comments outside the pattern string. This option corresponds to the
/x
modifier in Perl regular expressions.QRegularExpression.InvertedGreedinessOption
The greediness of the quantifiers is inverted:
*
,+
,?
,{m,n}
, etc. become lazy, while their lazy versions (*?
,+?
,??
,{m,n}?
, etc.) become greedy. There is no equivalent for this option in Perl regular expressions.QRegularExpression.DontCaptureOption
The non-named capturing groups do not capture substrings; named capturing groups still work as intended, as well as the implicit capturing group number 0 corresponding to the entire match. There is no equivalent for this option in Perl regular expressions.
QRegularExpression.UseUnicodePropertiesOption
The meaning of the
\w
,\d
, etc., character classes, as well as the meaning of their counterparts (\W
,\D
, etc.), is changed from matching ASCII characters only to matching any character with the corresponding Unicode property. For instance,\d
is changed to match any character with the Unicode Nd (decimal digit) property;\w
to match any character with either the Unicode L (letter) or N (digit) property, plus underscore, and so on. This option corresponds to the/u
modifier in Perl regular expressions.
- class MatchType#
The MatchType enum defines the type of the match that should be attempted against the subject string.
Constant
Description
QRegularExpression.NormalMatch
A normal match is done.
QRegularExpression.PartialPreferCompleteMatch
The pattern string is matched partially against the subject string. If a partial match is found, then it is recorded, and other matching alternatives are tried as usual. If a complete match is then found, then it’s preferred to the partial match; in this case only the complete match is reported. If instead no complete match is found (but only the partial one), then the partial one is reported.
QRegularExpression.PartialPreferFirstMatch
The pattern string is matched partially against the subject string. If a partial match is found, then matching stops and the partial match is reported. In this case, other matching alternatives (potentially leading to a complete match) are not tried. Moreover, this match type assumes that the subject string only a substring of a larger text, and that (in this text) there are other characters beyond the end of the subject string. This can lead to surprising results; see the discussion in the
partial matching
section for more details.QRegularExpression.NoMatch
No matching is done. This value is returned as the match type by a default constructed
QRegularExpressionMatch
orQRegularExpressionMatchIterator
. Using this match type is not very useful for the user, as no matching ever happens. This enum value has been introduced in Qt 5.1.
- class MatchOption#
Constant
Description
QRegularExpression.NoMatchOption
(inherits
enum.Flag
) No match options are set.QRegularExpression.AnchoredMatchOption
Use AnchorAtOffsetMatchOption instead.
QRegularExpression.AnchorAtOffsetMatchOption
The match is constrained to start exactly at the offset passed to
match()
in order to be successful, even if the pattern string does not contain any metacharacter that anchors the match at that point. Note that passing this option does not anchor the end of the match to the end of the subject; if you want to fully anchor a regular expression, useanchoredPattern()
. This enum value has been introduced in Qt 6.0.QRegularExpression.DontCheckSubjectStringMatchOption
The subject string is not checked for UTF-16 validity before attempting a match. Use this option with extreme caution, as attempting to match an invalid string may crash the program and/or constitute a security issue. This enum value has been introduced in Qt 5.4.
- class WildcardConversionOption#
(inherits
enum.Flag
) The WildcardConversionOption enum defines modifiers to the way a wildcard glob pattern gets converted to a regular expression pattern.Constant
Description
QRegularExpression.DefaultWildcardConversion
No conversion options are set.
QRegularExpression.UnanchoredWildcardConversion
The conversion will not anchor the pattern. This allows for partial string matches of wildcard expressions.
QRegularExpression.NonPathWildcardConversion
The conversion will not interpret the pattern as filepath globbing.
See also
- __init__(re)#
- Parameters:
re –
QRegularExpression
Constructs a
QRegularExpression
object as a copy ofre
.See also
operator=()
- __init__(pattern[, options=QRegularExpression.PatternOption.NoPatternOption])
- Parameters:
pattern – str
options – Combination of
PatternOption
Constructs a
QRegularExpression
object using the givenpattern
as pattern and theoptions
as the pattern options.See also
- __init__()
Constructs a
QRegularExpression
object with an empty pattern and no pattern options.See also
- static anchoredPattern(expression)#
- Parameters:
expression – str
- Return type:
str
Returns the
expression
wrapped between the\A
and\z
anchors to be used for exact matching.- static anchoredPattern(expression)
- Parameters:
expression – str
- Return type:
str
This is an overloaded function.
- captureCount()#
- Return type:
int
Returns the number of capturing groups inside the pattern string, or -1 if the regular expression is not valid.
- errorString()#
- Return type:
str
Returns a textual description of the error found when checking the validity of the regular expression, or “no error” if no error was found.
See also
- static escape(str)#
- Parameters:
str – str
- Return type:
str
Warning
This section contains snippets that were automatically translated from C++ to Python and may contain errors.
Escapes all characters of
str
so that they no longer have any special meaning when used as a regular expression pattern string, and returns the escaped string. For instance:escaped = QRegularExpression.escape("a(x) = f(x) + g(x)") # escaped == "a\\(x\\)\\ \\=\\ f\\(x\\)\\ \\+\\ g\\(x\\)"
This is very convenient in order to build patterns from arbitrary strings:
pattern = "(" + QRegularExpression.escape(name) + "|" + QRegularExpression.escape(nickname) + ")" re = QRegularExpression(pattern)
Note
This function implements Perl’s quotemeta algorithm and escapes with a backslash all characters in
str
, except for the characters in the[A-Z]
,[a-z]
and[0-9]
ranges, as well as the underscore (_
) character. The only difference with Perl is that a literal NUL insidestr
is escaped with the sequence"\\0"
(backslash +'0'
), instead of"\\\0"
(backslash +NUL
).- static escape(str)
- Parameters:
str – str
- Return type:
str
This is an overloaded function.
- static fromWildcard(pattern[, cs=Qt.CaseInsensitive[, options=QRegularExpression.WildcardConversionOption.DefaultWildcardConversion]])#
- Parameters:
pattern – str
cs –
CaseSensitivity
options – Combination of
WildcardConversionOption
- Return type:
Returns a regular expression of the glob pattern
pattern
. The regular expression will be case sensitive ifcs
isCaseSensitive
, and converted according tooptions
.Equivalent to
auto reOptions = cs == Qt::CaseSensitive ? QRegularExpression::NoPatternOption : QRegularExpression::CaseInsensitiveOption; return QRegularExpression(wildcardToRegularExpression(str, options), reOptions);
- globalMatch(subjectView[, offset=0[, matchType=QRegularExpression.MatchType.NormalMatch[, matchOptions=QRegularExpression.MatchOption.NoMatchOption]]])#
- Parameters:
subjectView – str
offset – int
matchType –
MatchType
matchOptions – Combination of
MatchOption
- Return type:
This is an overloaded function.
Use
globalMatchView()
instead.- globalMatch(subject[, offset=0[, matchType=QRegularExpression.MatchType.NormalMatch[, matchOptions=QRegularExpression.MatchOption.NoMatchOption]]])
- Parameters:
subject – str
offset – int
matchType –
MatchType
matchOptions – Combination of
MatchOption
- Return type:
Attempts to perform a global match of the regular expression against the given
subject
string, starting at the positionoffset
inside the subject, using a match of typematchType
and honoring the givenmatchOptions
.The returned
QRegularExpressionMatchIterator
is positioned before the first match result (if any).See also
QRegularExpressionMatchIterator
global matching
- globalMatchView(subjectView[, offset=0[, matchType=QRegularExpression.MatchType.NormalMatch[, matchOptions=QRegularExpression.MatchOption.NoMatchOption]]])#
- Parameters:
subjectView – str
offset – int
matchType –
MatchType
matchOptions – Combination of
MatchOption
- Return type:
This is an overloaded function.
Attempts to perform a global match of the regular expression against the given
subjectView
string view, starting at the positionoffset
inside the subject, using a match of typematchType
and honoring the givenmatchOptions
.The returned
QRegularExpressionMatchIterator
is positioned before the first match result (if any).Note
The data referenced by
subjectView
must remain valid as long as there areQRegularExpressionMatchIterator
orQRegularExpressionMatch
objects using it.See also
QRegularExpressionMatchIterator
global matching
- isValid()#
- Return type:
bool
Returns
true
if the regular expression is a valid regular expression (that is, it contains no syntax errors, etc.), or false otherwise. UseerrorString()
to obtain a textual description of the error.See also
- match(subjectView[, offset=0[, matchType=QRegularExpression.MatchType.NormalMatch[, matchOptions=QRegularExpression.MatchOption.NoMatchOption]]])#
- Parameters:
subjectView – str
offset – int
matchType –
MatchType
matchOptions – Combination of
MatchOption
- Return type:
This is an overloaded function.
Use
matchView()
instead.- match(subject[, offset=0[, matchType=QRegularExpression.MatchType.NormalMatch[, matchOptions=QRegularExpression.MatchOption.NoMatchOption]]])
- Parameters:
subject – str
offset – int
matchType –
MatchType
matchOptions – Combination of
MatchOption
- Return type:
Attempts to match the regular expression against the given
subject
string, starting at the positionoffset
inside the subject, using a match of typematchType
and honoring the givenmatchOptions
.The returned
QRegularExpressionMatch
object contains the results of the match.See also
QRegularExpressionMatch
normal matching
- matchView(subjectView[, offset=0[, matchType=QRegularExpression.MatchType.NormalMatch[, matchOptions=QRegularExpression.MatchOption.NoMatchOption]]])#
- Parameters:
subjectView – str
offset – int
matchType –
MatchType
matchOptions – Combination of
MatchOption
- Return type:
This is an overloaded function.
Attempts to match the regular expression against the given
subjectView
string view, starting at the positionoffset
inside the subject, using a match of typematchType
and honoring the givenmatchOptions
.The returned
QRegularExpressionMatch
object contains the results of the match.Note
The data referenced by
subjectView
must remain valid as long as there areQRegularExpressionMatch
objects using it.See also
QRegularExpressionMatch
normal matching
- namedCaptureGroups()#
- Return type:
list of strings
Warning
This section contains snippets that were automatically translated from C++ to Python and may contain errors.
Returns a list of
captureCount()
+ 1 elements, containing the names of the named capturing groups in the pattern string. The list is sorted such that the element of the list at positioni
is the name of thei
-th capturing group, if it has a name, or an empty string if that capturing group is unnamed.For instance, given the regular expression
(?<day>\d\d)-(?<month>\d\d)-(?<year>\d\d\d\d) (\w+) (?<name>\w+)
namedCaptureGroups() will return the following list:
("", "day", "month", "year", "", "name")
which corresponds to the fact that the capturing group #0 (corresponding to the whole match) has no name, the capturing group #1 has name “day”, the capturing group #2 has name “month”, etc.
If the regular expression is not valid, returns an empty list.
See also
isValid()
captured()
isEmpty()
- __ne__(re)#
- Parameters:
re –
QRegularExpression
- Return type:
bool
Returns
true
if the regular expression is different fromre
, or false otherwise.See also
operator==()
- __eq__(re)#
- Parameters:
re –
QRegularExpression
- Return type:
bool
Returns
true
if the regular expression is equal tore
, or false otherwise. TwoQRegularExpression
objects are equal if they have the same pattern string and the same pattern options.See also
operator!=()
- optimize()#
Compiles the pattern immediately, including JIT compiling it (if the JIT is enabled) for optimization.
See also
isValid()
Debugging Code that Uses QRegularExpression
- pattern()#
- Return type:
str
Returns the pattern string of the regular expression.
See also
- patternErrorOffset()#
- Return type:
int
Returns the offset, inside the pattern string, at which an error was found when checking the validity of the regular expression. If no error was found, then -1 is returned.
See also
- patternOptions()#
- Return type:
Combination of
PatternOption
Returns the pattern options for the regular expression.
See also
- setPattern(pattern)#
- Parameters:
pattern – str
Sets the pattern string of the regular expression to
pattern
. The pattern options are left unchanged.See also
- setPatternOptions(options)#
- Parameters:
options – Combination of
PatternOption
Sets the given
options
as the pattern options of the regular expression. The pattern string is left unchanged.See also
- swap(other)#
- Parameters:
other –
QRegularExpression
Swaps the regular expression
other
with this regular expression. This operation is very fast and never fails.- static wildcardToRegularExpression(str[, options=QRegularExpression.WildcardConversionOption.DefaultWildcardConversion])#
- Parameters:
str – str
options – Combination of
WildcardConversionOption
- Return type:
str
Warning
This section contains snippets that were automatically translated from C++ to Python and may contain errors.
Returns a regular expression representation of the given glob
pattern
.There are two transformations possible, one that targets file path globbing, and another one which is more generic.
By default, the transformation is targeting file path globbing, which means in particular that path separators receive special treatment. This implies that it is not just a basic translation from “*” to “.*” and similar.
wildcard = QRegularExpression.wildcardToRegularExpression("*.jpeg") # Will match files with names like: # foo.jpeg # f_o_o.jpeg # föö.jpeg
The more generic globbing transformation is available by passing
NonPathWildcardConversion
in the conversionoptions
.This implementation follows closely the definition of wildcard for glob patterns:
c
Any character represents itself apart from those mentioned below. Thus c matches the character c.
?
Matches any single character, except for a path separator (in case file path globbing has been selected). It is the same as b{.} in full regexps.
*
Matches zero or more of any characters, except for path separators (in case file path globbing has been selected). It is the same as .* in full regexps.
[abc]
Matches one character given in the bracket.
[a-c]
Matches one character from the range given in the bracket.
[!abc]
Matches one character that is not given in the bracket. It is the same as [^abc] in full regexp.
[!a-c]
Matches one character that is not from the range given in the bracket. It is the same as [^a-c] in full regexp.
Note
For historical reasons, a backslash (\) character is not an escape char in this context. In order to match one of the special characters, place it in square brackets (for example,
[?]
).More information about the implementation can be found in:
man 7 glob
By default, the returned regular expression is fully anchored. In other words, there is no need of calling
anchoredPattern()
again on the result. To get a regular expression that is not anchored, passUnanchoredWildcardConversion
in the conversionoptions
.See also
- static wildcardToRegularExpression(str[, options=QRegularExpression.WildcardConversionOption.DefaultWildcardConversion])
- Parameters:
str – str
options – Combination of
WildcardConversionOption
- Return type:
str
This is an overloaded function.