我是正则表达式,提取符合以下示例的数字,用粗体显示需要捕获的内容:
0 : 0 he9lo 12.33 你好 00 3a> 4 你好7 < strong> 5 <= 6 8hello -45,6 10help 123_456_bye 1 = a2 1123_hey
目标/条件是“提取”不包含任何字符但可以包含like等符号的数字序列。或或:捕获小数点(或。)或时间(:)。
试图在许多地方添加[^ a-zA-Z],因为我的主要问题是避免捕获带有数字和单词的后缀。 我还尝试使用negative lookahead,但没有很多结果(需要更多练习。) 在in regex101中进行正则表达式的实验,因为我发现它们提供的工具和参考要容易得多。
这是我到目前为止使用的正则表达式,仍在捕获(“错误地”)以下示例:10help 123_456_bye 1123_hey
(?:^|<|>|=|<=|>=|\:|\s)([-]?[0-9]{1,}((\.|,)[0-9]{0,2})?)
答案 0 :(得分:2)
当数字前面没有单词char且后面没有字符char时,您可以考虑匹配数字。
问题在于,由于可选的-
,-?
,您无法在模式的开头使用单词边界。如果在数字前的字符串中存在连字符,并且如果在字符前加了非单词char,则\b-?
模式将使匹配失败。
您还需要允许在某些特殊字符=
,>
,<
,:
和空白之前和之后进行匹配
您可以使用
(?<!\w)(?<=[\s=><:]|^)-?[0-9]+(?:[.,][0-9]{1,2})?(?!\w)(?=[\s=><:]|$)
请参见regex demo。
详细信息
(?<!\w)
-不允许在紧前使用单词char (?<=[\s=><:]|^)
-在紧接之前,必须有一个空格=
,>
,<
,:
或字符串的开头-?
-可选的连字符[0-9]+
-1个以上数字(?:[.,][0-9]{1,2})?
-.
或,
的可选序列,然后是1或2位数字(?!\w)
-紧随其后的单词不能为字符(?=[\s=><:]|$)
-之后,必须立即有一个空格=
,>
,<
,:
或字符串末尾。