跳到主要内容

· 阅读需 10 分钟
linziyang

正则表达式是使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。

语法

正则表达式描述了一种字符匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。

正则表达式由普通字符(例如字符 a 到 z)以及特殊字符(称为"元字符")组成的文字模式。

普通字符

普通字符包括没有显式指定为元字符的所有可打印和不可打印字符。这包括所有大写和小写字母所有数字所有标点符号一些其他符号

字符描述
[ABC]匹配 [...] 中所有的字符
[^ABC]匹配除了 [...] 中所有的字符
[A-Z][A-Z] 表示一个区间,即匹配所有大写字母 [a-z] 表示匹配所有小写字母
.匹配除换行符(\n、\r)之外的任何单个字符,相等于 \n\r
\s\S匹配所有。\s 是匹配所有空白符,包括换行,\S 非空白符,不包括换行
\w匹配字母、数字、下划线。等价于 [A-Za-z0-9_]
\d匹配数字
\D匹配非数字

非打印字符

非打印字符也可以是正则表达式的组成部分。

字符描述
\cx匹配由 x 指明的控制字符。例如, \cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 'c' 字符。
\f匹配一个换页符。等价于 \x0c 和 \cL
\n匹配一个换行符。等价于 \x0a 和 \cJ
\r匹配一个回车符。等价于 \x0d 和 \cM
\s匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [\f\n\r\t\v] 。注意 Unicode 正则表达式会匹配全角空格符
\S匹配任何非空白字符。等价于 [^ \f\n\r\t\v]
\t匹配一个制表符。等价于 \x09 和 \cI
\v匹配一个垂直制表符

特殊字符

字符描述
$匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 '\n' 或 '\r'。要匹配 $ 字符本身,请使用 $
( )标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 ()
*匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 *
+匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 +
.匹配除换行符 \n 之外的任何单字符。要匹配 . ,请使用 .
[标记一个中括号表达式的开始。要匹配 [,请使用 [
?匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 \?。
\ 将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, 'n' 匹配字符 'n'。'\n' 匹配换行符。序列 '\' 匹配 "\",而 '(' 则匹配 "("。
^匹配输入字符串的开始位置,除非在方括号表达式中使用,当该符号在方括号表达式中使用时,表示不接受该方括号表达式中的字符集合。要匹配 ^ 字符本身,请使用 \^。
{标记限定符表达式的开始。要匹配 {,请使用 {
|指明两项之间的一个选择。要匹配

限定符

限定符用来指定正则表达式的一个给定组件必须要多少次才能满足匹配。有 * + ? {n} {n, } {n,m}

字符描述
*匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于 {0,}
+匹配前面的子表达式一次或多次。例如,zo+ 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}
?匹配前面的子表达式零次或一次。例如,do(es)? 可以匹配 "do" 、 "does"、 "doxy" 中的 "do" 和 "does"。? 等价于 {0,1}
{n}n 是一个非负整数。匹配确定的 n 次。例如,o{2} 不能匹配 "Bob" 中的 o,但是能匹配 "food" 中的两个 o
{n,}n 是一个非负整数。至少匹配 n 次。例如,o{2,} 不能匹配 "Bob" 中的 o,但能匹配 "foooood" 中的所有 o。o{1,} 等价于 o+。o{0,} 则等价于 o*
{n,m}m 和 n 均为非负整数,其中 n <= m。最少匹配 n 次且最多匹配 m 次。例如,o{1,3} 将匹配 "fooooood" 中的前三个 o。o{0,1} 等价于 o?。请注意在逗号和两个数之间不能有空格。

定位符

定位符使您能够将正则表达式固定到行首或行尾。它们还使您能够创建这样的正则表达式,这些正则表达式出现在一个单词内、在一个单词的开头或者一个单词的结尾。

定位符用来描述字符串或单词的边界,^ 和 $ 分别指字符串的开始与结束,\b 描述单词的前或后边界,\B 表示非单词边界。

字符描述
^匹配输入字符串开始的位置。如果设置了 RegExp 对象的 Multiline 属性,^ 还会与 \n 或 \r 之后的位置匹配。
$匹配输入字符串结尾的位置。如果设置了 RegExp 对象的 Multiline 属性,$ 还会与 \n 或 \r 之前的位置匹配。
\b匹配一个单词边界,即字与空格间的位置。
\B非单词边界

注意:

  • 不能将限定符与定位符一起使用。由于在紧靠换行或者单词边界的前面或后面不能有一个以上位置,因此不允许诸如 ^* 之类的表达式。

  • 若要匹配一行文本开始处的文本,请在正则表达式的开始使用 ^ 字符。不要将 ^ 的这种用法与中括号表达式内的用法混淆。

  • 若要匹配一行文本的结束处的文本,请在正则表达式的结束处使用 $ 字符。

  • 若要在搜索章节标题时使用定位点,下面的正则表达式匹配一个章节标题,该标题只包含两个尾随数字,并且出现在行首。

Δ\color{red}{\Delta} 选择

用圆括号 () 将所有选择项括起来,相邻的选择项之间用 | 分隔。

() 表示捕获分组,() 会把每个分组的匹配的值保存起来,多个匹配值可以通过数字 n 来查看(n是一个数字,表示第 n 个捕获组的内容)。

?=,?<=,?!,? <! 的使用区别

  • exp1(?=exp2) : 查找 exp2 前面的 exp1

  • (?<=exp 2) exp 1 : 查找 exp2 后面的 exp1

  • exp1(?!exp2) : 查找后面不是 exp2 的 exp 1

  • (?<!exp2)exp1 : 查找前面不是 exp2 的 exp1

修饰符

/pattern/flags
修饰符含义描述
iignore-将匹配设置为不区分大小写,搜索时不区分大小写:A 和 a 没有区别
gglobal查找所有的匹配项
mmulti line使边界字符 ^ 和 $ 匹配每一行的开头和结尾,记住是多行,而不是整个字符串的开头和结尾
s特殊字符圆点 . 中包含换行符 \n默认情况下的圆点 . 是匹配除换行符 \n 之外的任何字符,加上 s 修饰符之后, . 中包含换行符 \n

· 阅读需 6 分钟
linziyang

预测评估的意义

  • 了解不同方法的预测水平和发展状况,促进方法的改进和预测水平的提高。
  • 为综合集成决策提供依据,提高预测准确率。

预测准确率(P)

  • 预测准确率是最古老、最普遍使用的评分方法

    P=NbN×100P=\frac{N_{b}}{N}\times 100%

  • NpN_{p}为预测正确的站(次)数

  • N 预测总站(次)数

  • 在正负距平 2 分类预测中,预测距平与实况距平一致为预测正确。P>50% 才有意义,受气候概率影响,可能没有反应真实的预测水平。

预测评分(PsP_{s}

  • 预测评分是在距平符号预测百分率的基础上加上异常级加权得分构成

  • 实际业务中经常将距平的异常程度划分为若干级,异常程度越大,越难预测,给予更多的分数。

  • 公式

Ps=N0+f1×n1+f2×n2N+f1×n1+f2×n2×100P_{s}=\frac{N_{0}+f_{1}\times n_{1}+f_{2}\times n_{2}}{N+f_{1}\times n_{1}+f_{2}\times n_{2}}\times 100
  • N0N_{0}包括距平符号报对的以及预测与实况虽相反但是都属于正常级的站数

  • n1f1n_{1},f_{1},一级异常报对的站数和权重

  • n2f2n_{2},f_{2}, 二级异常报对的站数和权重

  • N 参加评定的站数

  • 权重系数fi=1Pif_{i}=\frac{1}{P_{i}}

  • PiP_{i}预测量达到 i 级异常的气候概率,权重系数fif_{i}与其相对级的气候概率PiP_{i}成反比。

    Pi=Ni(i级占的年份)N(总的年份)P_{i}=\frac{N_{i}(第 i 级占的年份)}{N(总的年份)}

  • 月尺度预测取f1=2,f2=1f_{1}=2,f_{2}=1;季节预测中f1=5,f2=2f_{1}=5,f_{2}=2.

异常级的 TS 评分

  • 异常级评分主要用来评估预测异常级的能力,通常指达到二级或一级异常。

    TS=NcN0+Nf+NcTS=\frac{N_{c}}{N_{0}+N_{f}+N_{c}}

  • NcN_{c}报对达到异常级的站数

  • N0N_{0}实况达到异常级的站数

  • NfN_{f}预测达到异常级的站数

  • TS 评分表示报对的异常级站数占实况和报错异常级的站数的百分比。目前预测的降水距平百分率或月平均气温距平出现异常级的概率较小,因此异常级评分也较低。

距平相关系数(ACC)

  • 距平相关系数是预测距平和实况之间的一种相关系数,反映预测距平空间分布上的一致程度。

    ACC=i=1N(ΔRifΔRif)(ΔRi0ΔRi0)i=1N(ΔRifΔRi0)2i=1N(ΔRi0ΔRi0)2ACC=\frac{\sum_{i=1}^{N}(\Delta R_{if}-\overline{\Delta R_{if}})(\Delta R_{i0}-\overline{\Delta R_{i0}})}{\sqrt{\sum_{i=1}^{N}(\Delta R_{if}-\overline{\Delta R_{i0}})^2 \sum_{i=1}^{N}(\Delta R_{i0}-\overline{\Delta R_{i0}})^2}}

  • RifR_{if}预测结果

  • Ri0R_{i0}观测值

  • 特点

    • 距平相关系数对大的距平比较敏感。
    • 距平相关系数只能反映观测值与预测值之间相对趋势分布的相似度。

技巧评分(S)

  • 技巧评分是相对于无技巧预测的预测评分方法,只有预测正确的次(站)数大于无技巧预测正确的次(站)数时,才可以判断预测是有技巧的。

    S=NpCNCS=\frac{N_{p}-C}{N-C}

  • NpN_{p}:预测正确的次(站)数

  • N: 预测总次(站)数

  • C:无技巧预测正确的次(站)数

  • 当预测正确的次(站)数等于无技巧预测的次(站)数时,无技巧评分,小于无技巧预测正确的次(站)数得负技巧评分,当全部次(站)都预测正确时得 100%

  • 无技巧预测

    • 随机预测
    • 气候概率预测
    • 持续性预测

临界成功指数(CSI)

同 TS 评分一样

CSI=hitshits+falsealarms+missesCSI=\frac{hits}{hits+falsealarms+misses}

预测 晴预测 雨
真实 晴correctnegativesfalsealarms(误警)
真实 雨misses(漏报)hits(击中)

公平技巧评分(ETS)

  • ETS 是用于衡量对流尺度集合预报的预报效果。ETS 评分表示在预报区域内满足某降水阈值的降水预报结果相对于满足同样降水阈值的随机预报的预报技巧
num = (hits + falsealarms) * (hits + misses)
den = hits + misses + falsealarms + correctnegatives
Dr = num / den
ETS = (hits - Dr) / (hits + misses + falsealarms - Dr)

漏报率(MAF)

  • 漏报率:实际降水区域中漏报的区域占据全部实际降水区域的比重

    MAR=misseshits+missesMAR=\frac{misses}{hits+misses}

命中率(POD)

  • 命中率:即预测出的实际降水区域占据全部实际降水区域的比重

    POD=hitshits+misses=1MARPOD=\frac{hits}{hits+misses}=1-MAR

偏差评分(Bia score)

  • 偏差评分(Bia score)主要用来衡量模式对某一量级降水的预报偏差,该评分在数值上等于预报区域内满足某降水阈值的总格点数与对应实况降水总格点数的比值 (Kong et al, 2008)。用来反映降水总体预报效果的检验方法。

    Bias=hits+falsealarmshits+missesBias=\frac{hits+falsealarms}{hits+misses}

预测 晴预测 雨
真实 晴correctnegativesfalsealarms(误警)
真实 雨misses(漏报)hits(击中)

HSS 评分

用于定量评估不同方案的模拟。

HHS_num=2(hitscorrmissesfalsealarms)HSS_den=(misses2+falsealarms2+2hitscorrectnegatives+(misses+falsealarms)(hits+correctnegatives))HSS=HSS_numHSS_denHHS\_num=2*(hits*corr-misses*falsealarms) \\ HSS\_den=(misses^2 + falsealarms^2 + 2*hits*correctnegatives \\+ (misses + falsealarms)*(hits + correctnegatives))\\\\ HSS=\frac{HSS\_num}{HSS\_den}

BSS 评分

BSS=mean((realpre)2)BSS=\sqrt{mean((real-pre)^2)}

MAE 评分

MAE=mean(preobs)MAE=mean(|pre-obs|)

RMSE 评分

RMSE=mean((realpre)2)RMSE=\sqrt{mean((real-pre)^2)}