二维序列正则表达式(seq-re)
seq-re的Python项目详细描述
seq-re模式与python中使用的普通正则表达式(re)非常相似, 其中分隔符 […] 表示元组–序列的第二维度。
1.1内部
[
和
]
是元组的开始和结束分隔符,例如
[…]
;
分隔元组包含的每个元素,
尾部的连续
;
可以省略,
例如
[a b;x;;]
,
[a b;x]
表示一个元素的不同值,例如
a b
。
这些值形成一个集合,集合中的任何字符串都将匹配,
例如,
a b
将匹配
a
或
b
^
是元素的第一个字符,
所有不在此元素的值集中的字符串都将匹配。
如果不是元素的第一个字符,
^
没有特殊意义。
如果
^
是元素的第一个字符,但它是文本字符串的一部分,
^
应该用来转义它。
上述操作的优先级:
[
]
<;
;
<;
^
(非文字)<;
<;
^
(文字)。
\
是前面提到的特殊字符之前的转义符号。
除
]
、
:
或
\
以外的字符在
[…]
中失去了特殊意义。
要在文字中表示
]
,
:
或
,应在
]
,
:
或
之前添加
\
。
同时,为了表示
]
、
;
或
之前的文本反斜杠,
应在纯文本中使用
也就是说,python代码中必须使用
'\\\'
。
[ 和 ]
是元组的开始和结束分隔符,例如 […]
;
分隔元组包含的每个元素, 尾部的连续 ; 可以省略, 例如 [a b;x;;] , [a b;x]
表示一个元素的不同值,例如 a b 。 这些值形成一个集合,集合中的任何字符串都将匹配, 例如, a b 将匹配 a 或 b
^
是元素的第一个字符, 所有不在此元素的值集中的字符串都将匹配。 如果不是元素的第一个字符, ^ 没有特殊意义。 如果 ^ 是元素的第一个字符,但它是文本字符串的一部分, ^ 应该用来转义它。
上述操作的优先级:
[ ] <; ; <; ^ (非文字)<; <; ^ (文字)。
\
是前面提到的特殊字符之前的转义符号。 除 ] 、 : 或 \ 以外的字符在 […] 中失去了特殊意义。 要在文字中表示 ] , : 或 ,应在 ] , : 或 之前添加 \ 。 同时,为了表示 ] 、 ; 或 之前的文本反斜杠, 应在纯文本中使用 也就是说,python代码中必须使用 '\\\' 。
1.2外部
-
普通re中特殊字符的特殊含义可以在这里找到,
但有以下讨论的局限性。
-
不支持将
[
和
]
作为特殊字符来表示一组字符。
-
不支持以下转义特殊字符:
\number
,
\a
,
\b
,
\b
,
\d
,
\d
,
\s
,
\s
,
\w,
\w
,
\z
,
\a
,
\b
,
\f
,
\n
,
\r
,
\t
,
\v
,
\x
-
不支持字符范围,
如
[0-9a-za-z]
,
[\u4e00-\u9fbb\u3007]
(单字和汉字
用于普通RE。
-
空白和非特殊字符将被忽略。
< > >
-
是任意元组的缩写。
-
模式中的命名组非常有用。
作为扩展名,可以遵循以
@
开头的格式字符串在组名之后,
描述属于此组的元组的哪个元素将作为结果输出。
例如:
(?p<;名称@d1,d2:d3>;…)
,
其中
d1
,
d2
和
d3
都是元组中元素的0基位置索引数。
-
@0,2:4
表示匹配结果中只有第0个
从元组的第2到第3个元素将被输出。
-
@@
表示组本身的模式将被输出,而不是匹配的结果。
您可以选择是否包含组名和括号。
-
@
表示将输出匹配结果中元组的所有元素。
< > >
- 不支持将 [ 和 ] 作为特殊字符来表示一组字符。
-
不支持以下转义特殊字符:
\number
,
\a
,
\b
,
\b
,
\d
,
\d
,
\s
,
\s
,
\w, \w , \z , \a , \b , \f , \n , \r , \t , \v , \x - 不支持字符范围, 如 [0-9a-za-z] , [\u4e00-\u9fbb\u3007] (单字和汉字 用于普通RE。
- 空白和非特殊字符将被忽略。 < > >
- 是任意元组的缩写。
- 模式中的命名组非常有用。 作为扩展名,可以遵循以 @ 开头的格式字符串在组名之后, 描述属于此组的元组的哪个元素将作为结果输出。 例如: (?p<;名称@d1,d2:d3>;…) , 其中 d1 , d2 和 d3 都是元组中元素的0基位置索引数。
- @0,2:4 表示匹配结果中只有第0个 从元组的第2到第3个元素将被输出。
- @@ 表示组本身的模式将被输出,而不是匹配的结果。 您可以选择是否包含组名和括号。
- @ 表示将输出匹配结果中元组的所有元素。 < > >
1.3 […]
中的布尔逻辑给定一个3元组序列 [[s1,s2,s3],… ,
以及
[x;;y] 将匹配 s1 == x &; s3 == y 。 它的行为看起来像普通的re模式。:x.y)
或
[x;;][;;y] 将匹配 s1 = x s3= y 。 它的行为看起来像普通的re模式。X.):…Y)
不
如果 [;^p;] 将匹配 s2 != p 。 它的行为看起来像普通的re模式。:.[^P]。
我们也可以使用一个普通re的否定前瞻断言, 给一个否定的覆盖它的下面。 例如, (?![;p;][q])[;;][;;] <;==>; [;^p;][^q;;] , 哪些行为看起来像普通的re模式?(?)(P)?:q…)…