4 hello7 5|=|=|\:|\s)([-]?[0-9]{1,}((\.-6ren">
gpt4 book ai didi

java - 我如何升级此正则表达式不捕获 "1hey"或 "123_456_bye"或 "1123_hey"

转载 作者:行者123 更新时间:2023-11-30 01:46:45 24 4
gpt4 key购买 nike

我使用正则表达式来提取符合以下示例的数字,粗体是需要捕获的内容:

0:0 he9lo 12.33 hello 00 3a>4 hello7 < strong>5<=6 8hello -45,6 10help 123_456_bye 1=a2 1123_hey

目标/条件是“提取”不包含任何字符但可以包含类似符号的数字序列。或 , 或 : 捕获小数(, 或 .) 或时间(:)。

尝试在很多地方添加 [^a-zA-Z] 因为我的主要问题是避免捕获带有数字+单词的序列。我也尝试使用 negative lookahead 但没有很多结果(需要更多练习。)使用 in regex101 来试验正则表达式,因为我发现使用它们提供的工具和引用要容易得多。

这是我到目前为止使用的正则表达式,它仍然捕获(“错误地”)以下示例:10help 123_456_bye 1123_hey

(?:^|<|>|=|<=|>=|\:|\s)([-]?[0-9]{1,}((\.|,)[0-9]{0,2})?)

最佳答案

您可以考虑匹配前面没有单词字符且后面没有单词字符的数字。

问题是,由于可选的 -,您无法在模式的开头使用字边界。 , -?\b-?如果连字符出现在字符串中的数字之前并且前面有非单词字符,则模式将导致匹配失败。

您还需要允许在一些特殊字符之前和之后进行匹配,= , > , < , :和空格

您可以使用

(?<!\w)(?<=[\s=><:]|^)-?[0-9]+(?:[.,][0-9]{1,2})?(?!\w)(?=[\s=><:]|$)

请参阅regex demo .

详细信息

  • (?<!\w) - 前面不允许有单词字符
  • (?<=[\s=><:]|^) - 紧接之前,必须有一个空格,= , > , < , :或字符串开头
  • -? - 可选的连字符
  • [0-9]+ - 1+ 位数字
  • (?:[.,][0-9]{1,2})? - 可选序列.,然后是 1 或 2 位数字
  • (?!\w) - 不允许紧随其后的单词字符
  • (?=[\s=><:]|$) - 紧接着,必须有一个空格,= , > , < , :或字符串结尾。

关于java - 我如何升级此正则表达式不捕获 "1hey"或 "123_456_bye"或 "1123_hey",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57671122/

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