regex 在ICU正则表达式中有条件地使用(?〈=^)

cpjpxq1n  于 2023-04-13  发布在  其他
关注(0)|答案(2)|浏览(97)

我有几行文字,每一行都以数字,粗俗的分数或字符开头。
我正在使用Regex的ICU变体。我想使用(?<=^)来选择所有行开头白色,而不是以普通分数的数字开头。
我试过:(?<=^\s*)(?=\S)(?!\d+\/\d),它选择所需的空格,但对所有行不考虑任何条件。
我错过了什么?

我试过了:

^[a-zA-Z](?<=^)\s*

(?<=\R\s*)[a-zA-Z]\s*\D\s*

\s+(?=\n(?!(?:\d+  )?\d+\/\d))

^[a-zA-Z](?<=^)\s*
vltsax25

vltsax251#

您可以用途:

^\s+(?!\s)(?!\d+/\d+)

它匹配行开头的空格,后面没有digits/digits
演示here

41zrol4v

41zrol4v2#

如果你想“选择所有行开头白色”,那么这个模式(?<=^\s*)(?=\S)(?!\d+\/\d)不匹配任何东西,因为你只使用了一个持有 * 位置 * 的Assert。
关于其他模式:

  • ^[a-zA-Z](?<=^)\s*不匹配任何东西,因为这个Assert(?<=^)永远不会为真,因为它应该已经匹配了^[a-zA-Z]
  • (?<=\R\s*)[a-zA-Z]\s*\D\s*要求存在换行符,匹配以[a-zA-Z]开始,不匹配空格
  • \s+(?=\n(?!(?:\d+ )?\d+\/\d))仅当后接换行符时匹配1+空格字符,并且不考虑“以数字、普通分数或字符开头”

您可以用途:

^\h+\b(?!\d+\/\d)

说明

  • ^字符串开头
  • \h+匹配1+水平空格字符
  • \b字边界
  • (?!\d+\/\d)负先行,Assert不是1+位/和当前位置正右侧的一位

Regex demo
或者如果只有字符a-z或右边的数字:

^\h+\b(?=[a-zA-Z\d])(?!\d+\/\d)

Regex demo

相关问题