正则表达式将整个数字与后视和前视逻辑匹配(无字边界)
Regex match an entire number with lookbehind and look ahead logic(without word boundaries)
我正在尝试根据几个条件检测字符串是否有数字。例如,如果数字被括号括起来,我不想匹配它,并且我正在使用前瞻和后视来执行此操作,但是当数字包含多个数字时,我 运行 遇到了问题。此外,数字可以位于没有任何 space 分隔符的文本之间。
我的正则表达式:
(?https://regex101.com/r/RnTSMJ/1
示例:
{2}:不应匹配。 //我的正则表达式有效
{34:不应该匹配。 //我的正则表达式在 {34
中匹配 4
45}:不应该匹配。 //我的正则表达式在 {45
中匹配 4
{123}:不应匹配。 //我的正则表达式在 {123}
中匹配 2
我查看了 Regex.Match whole words,但这种方法对我不起作用。如果我使用单词边界,上述情况会按预期工作,但像下面这样的情况不会在数字被文本包围的情况下发生。我还想添加一些额外的逻辑,比如不匹配特定字符串,如 1st、2nd 等或#1、#2 等
更新的正则表达式:
(?<!\[|\{|\(|#)(\b\d+\b)(?!\]|\}|\|st|nd|rd|th)
看这里https://regex101.com/r/DhE3K4/4
123abd //应该匹配 123
abc345 //应该匹配234
ab2123cd // 应该匹配 2123
纯正则表达式是否可行,还是我需要更全面的东西?
您可以匹配 1 个或多个数字,断言左边和右边的内容不是 {
、}
或右边的数字或任何其他选项
(?<![{\d#])\d+(?![\d}]|st|nd|rd|th)
说明
(?<![{\d#])
负向后视,断言左边的不是 {
、#
或数字
\d+
匹配 1+ 个数字
(?!
否定前瞻,断言右边的不是
[\d}]|st|nd|rd|th
匹配数字,}
或任何替代项
)
关闭前瞻
以下正则表达式给出了预期的结果。
(?<![#\d{])\d+(?!\w*(?:}|(?:st|th|rd|nd)\b))
我正在尝试根据几个条件检测字符串是否有数字。例如,如果数字被括号括起来,我不想匹配它,并且我正在使用前瞻和后视来执行此操作,但是当数字包含多个数字时,我 运行 遇到了问题。此外,数字可以位于没有任何 space 分隔符的文本之间。
我的正则表达式:
(?https://regex101.com/r/RnTSMJ/1
示例: {2}:不应匹配。 //我的正则表达式有效
{34:不应该匹配。 //我的正则表达式在 {34
中匹配 445}:不应该匹配。 //我的正则表达式在 {45
中匹配 4{123}:不应匹配。 //我的正则表达式在 {123}
中匹配 2我查看了 Regex.Match whole words,但这种方法对我不起作用。如果我使用单词边界,上述情况会按预期工作,但像下面这样的情况不会在数字被文本包围的情况下发生。我还想添加一些额外的逻辑,比如不匹配特定字符串,如 1st、2nd 等或#1、#2 等
更新的正则表达式:
(?<!\[|\{|\(|#)(\b\d+\b)(?!\]|\}|\|st|nd|rd|th)
看这里https://regex101.com/r/DhE3K4/4
123abd //应该匹配 123
abc345 //应该匹配234
ab2123cd // 应该匹配 2123
纯正则表达式是否可行,还是我需要更全面的东西?
您可以匹配 1 个或多个数字,断言左边和右边的内容不是 {
、}
或右边的数字或任何其他选项
(?<![{\d#])\d+(?![\d}]|st|nd|rd|th)
说明
(?<![{\d#])
负向后视,断言左边的不是{
、#
或数字\d+
匹配 1+ 个数字(?!
否定前瞻,断言右边的不是[\d}]|st|nd|rd|th
匹配数字,}
或任何替代项
)
关闭前瞻
以下正则表达式给出了预期的结果。
(?<![#\d{])\d+(?!\w*(?:}|(?:st|th|rd|nd)\b))