Live2D

【正则表达式】关于正则表达式在程序中可能的报错情况

regex._regex_core.error: missing ) at position 16

  • 报错原因:在正则表达式中括号不对等,需要查验是否括号一致,也有可能是需要转义的字符没有转义导致的括号缺失,具体见第三部分
  • 反例:
r'(?<=("addr":)|("name:":)[0-9A-Za-z]+'

regex._regex_core.error: bad character range at position 74

  • 报错原因:在正则表达式的候选字符中,字符需要按照ascii码排序,
  • 反例:在方括号之间的后面几个字符不是按照顺序来的
r'(?<=(address=))[0-9A-Za-z_*$@]+

regex._regex_core.error: unterminated character set at position 42

  • 报错原因:必须转义正则表达式中的特殊字符,否则可能会解析错误
  • 反例:例如(){[
r'(?<=(address=))[0-9A-Za-z()]+
  • 需要转移的字符不完全总结:
 \{}		# 左大括号
 \[] 		# 左方括号
 \(\)		# 左右括号
 * . ? + ^ $ | \ / 

他们的含义:

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

这一部分参考:https://blog.csdn.net/qq_42449963/article/details/107279697
如果是表达空格,可以直接使用\s,这里的\就属于发挥它的作用了,不需要转义。

posted @ 2022-11-03 20:39  WSquareJ  阅读(702)  评论(0编辑  收藏  举报