正则表达式中的插入符号

2024-05-29 11:17:47 发布

您现在位置:Python中文网/ 问答频道 /正文

具体来说,^在正则表达式中何时表示“match start”,何时表示“not the following”?

从维基百科的文章和其他参考资料中,我得出结论:前者在开头,后者与括号一起使用,但是程序如何处理插入符号在开头和括号处的情况?比如说,^[b-d]t$匹配什么?


Tags: the程序match文章符号not情况start
2条回答

^仅在[]的内部和开始处表示“不是下面的”,因此[^...]

当它在[]中,但开始时不是时,它表示实际的^字符。

当它被转义(\^)时,也意味着实际的^字符。

在所有其他情况下,它意味着字符串/行的开始(其中一个与语言/设置相关)。

简而言之:

  • [^abc]->;不是a、b或c
  • [ab^cd]->;a、b、^(字符)、c或d
  • \^->;一个^字符
  • 其他任何位置->;字符串/行的开头。

所以^[b-d]t$的意思是:

  • 线路起点
  • b/c/d字符
  • t字
  • 行尾

我在回答这个问题Meaning of caret depending on the context
Wiktor Stribiżew于2019年11月16日将其标记为完全复制品
其中Carets in Regular Expressions

要忽略块注释吗?好吧,这个^\s*可能不好,因为\s可以跨行。看看Dot net是否支持水平空白\h如果不支持[^\S\r\n]也可以。可以使用多行内联修饰符(?m)(或RegexOptions.Multiline)。这将改变^的含义,表示行的开始,而不是字符串的开始(默认值)。所以,它最终是(?m)^\h*(#)。抓捕组应该告诉他们位置。如果不是,这也是(?m)(?<=^\h*)#,匹配的位置就是偏移量。

有关完整的regex信息,请参见此页https://docs.microsoft.com/en-us/dotnet/standard/base-types/regular-expression-language-quick-reference

注意^\s*当然可以工作,但是它匹配许多不必要的可以跨行的cruft。

相关问题 更多 >

    热门问题