gpt4 book ai didi

java - 匹配不在行开头的表达式的正则表达式

转载 作者:行者123 更新时间:2023-11-30 04:19:21 25 4
gpt4 key购买 nike

我已经在一个表达式上敲了一个多小时,但没有结果。所以是时候寻求帮助了。

在以下(多行)文本中:
华尔兹15
华尔兹卷。 15
华尔兹卷。 一个
华尔兹,卷15
第 15 卷:华尔兹

粗体部分是我迄今为止想到的正则表达式的匹配项:
(?!^),*\s*(?:vol[ume]*\.*)\s*(?=[0-9A-Z]+)

除了最后一个之外,所有内容都是正确的,不应包含最后一个,因为它位于行的开头。
据我所知,从 http://www.regular-expressions.info/refadv.html 的文档中可以看出,表达式中的 (?!^) 查找部分应排除 ,*\s*(?:vol[ume]*\.*)\s*( 找到的匹配项?=[0-9A-Z]+) 在行的开头,但这似乎不起作用。

另一方面,表达式 (?!^)op[us]*\.*\s*(?=[0-9]+) 可以正常工作并且不会返回匹配以下文本的最后一行:
华尔兹作品。 15
华尔兹作品15
作品 15:华尔兹

第一个表达式我做错了什么?

最佳答案

这就是您的正则表达式未按预期工作的原因

  • 缺少负向回顾 < 。应该是(?<!^)
  • 后向查找应先于 (?:vol[ume]*\.*)立即
  • 您需要启用多行(?m) (没有它 ^ 将仅匹配输入的开头)

因此,经过这些更正的正则表达式将变为

(?m),*\s*(?<!^)(?:vol[ume]*\.*)\s*(?=[0-9A-Z]+)

上述方法有效,但还可以进一步改进。使用[ume]*也会让像 voleee 这样的匹配, volmeu等等,而不是无限制地使用 * , ,.可以通过 ? 进行选择.

(?m),?\s*(?<!^)(?:vol\.?|volume)\s*(?=[0-9A-Z]+)

关于java - 匹配不在行开头的表达式的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17498962/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com