Sorry, your browser cannot access this site
This page requires browser support (enable) JavaScript
Learn more >

一些语法

x 匹配字符 x
. 除换行符外的任何字符
[xyz] 字符类别;匹配xyz
[abj-oZ] 具有范围的字符类;匹配 abjo中的任何字母或 Z
[^A-Z] 否定字符类,即该类中的字符以外的任何字符 [^A-Z\n] 除大写字母或换行符外的任何字符

r* 零个或多个r,其中r是任何正则表达式(如何确定r:*前的子表达式)
r+ 一个或多个 r
r? 零或一个r
r{2,5} 从两到五​​个
r{2,} 两个或多个
r{4} 恰好4个
上面这些默认是最长匹配,加一个?则是最短匹配
*? 重复任意次,但尽可能少重复
+? 重复1次或更多次,但尽可能少重复
?? 重复0次或1次,但尽可能少重复
{n,m}? 重复n到m次,但尽可能少重复
{n,}? 重复n次以上,但尽可能少重复

{name} 扩展name定义,把别处定义的name拿过来用

\X 普通字符(不是特殊字符,比如不是*,"等)不转义,就是表示\x。否则,为字符X
举例:”[xyz]"foo” 表示[xyz]"foo,外面的””表示是一个字符串,里面的"表示是一个转义字符,匹配"
\0 一个NUL字符(ASCII代码0)
\123 八进制值123的字符
\x2a 十六进制值为2a的字符

(r) 匹配r;定义子表达式;括号用于改变优先级;且可以和\1等配合进行捕获

rs 正则表达式r后跟正则表达式s,称为串联
r|s rs
r/s 一个r,但前提是其后跟一个s。确定此规则是否为最长匹配项时,
将包含用s匹配的文本,但在执行操作之前,该文本将返回到输入。因此,
该操作只会看到与r匹配的文本。这种模式称为尾随上下文。 (flex不能正确
匹配某些r/s组合。有关危险的尾随上下文,请参见限制。)

^r 一个r,但仅在一行的开头(即刚开始扫描时,或在扫描换行符之后)。
r$ 一个r,但只能在一行的末尾(即,在换行符之前)。等同于r/\n。
请注意,flex的”换行符”概念与C编译器用来将flex解释为\n的情况完全相同。
特别是,在某些DOS系统上,您必须自己过滤掉输入中的\r,
或显式地将” r /\r\ n”用作” r $”。

r 一个r,但仅在起始条件s中(请参阅”起始条件”以了解起始条件)。
<s1,s2,s3> r 同上,但在任何启动条件s1,s2或s3中。
<*> r 任何开始条件下的r,甚至是排他条件。
<< EOF >> 文件结束。
<s1,s2><> 在开始条件s1或s2中的文件结束

匹配任意字符串

注意这样不行:[.\n]* 这样会匹配.\n而不是任意字符
要这样写:(.|\n)*

python正则表达式

获取第一个匹配项的位置和值

import re

pattern = r"\d+"
string = "The price is 20 dollars and 50 cents."

match = re.search(pattern, string)

if match:
    print("匹配项的位置:", match.start())  # 匹配项的起始位置
    print("匹配项的结束位置:", match.end())  # 匹配项的结束位置
    print("匹配项的值:", match.group())  # 匹配项的值

获取所有匹配项的位置和值

import re

pattern = r"\w+"
string = "Python is a popular programming language."

matches = re.finditer(pattern, string)

for match in matches:
    print("匹配项的位置:", match.start())  # 匹配项的起始位置
    print("匹配项的结束位置:", match.end())  # 匹配项的结束位置
    print("匹配项的值:", match.group())  # 匹配项的值

评论