帮助使用正则表达式查找数字

发布于 2024-11-18 11:58:42 字数 422 浏览 3 评论 0原文

我试图找到所有单个数字(使用 vim):

  • 行开头的数字
  • 尾的数字 数字后面必须跟有非数字,
  • 但不能跟在“点”后面或继续" 和一个数字或一个 "," 和一个数字。

这是正确的
7
字7
7字
7.
.7
一个,7
字7字
字 7 字
7-7

但不是这个
7.7
7,7
77

谁能帮我解释一下正则表达式?

编辑:
也许我在下面有关原子分组的答案的帮助下找到了它。 Vim 确实支持它: <代码>\(\d\.\|\d\,\|\d\)\@

I'm trying to find all single numbers (with the use of vim):

  • numbers at start of line
  • numbers at end of line
  • the number has to be followed and proceded by a non number
  • but may not be folowed or proceded with a "dot" and a number or a "," and a number.

this is correct
7
word7
7word
7.
.7
a,7
word7word
word 7 word
7-7

but not this
7.7
7,7
77

Can anyone help me and explain the regex?

EDIT:
may'be I've found it with the help of an answer below about atomic grouping. Vim does support it:
\(\d\.\|\d\,\|\d\)\@<!\d\(\.\d\|\,\d\|\d\)\@!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

握住你手 2024-11-25 11:58:42

你可以试试这个:

\v%(\d+%(\.|,))@<!\d@<!\d+@>%(%(\.|,)\d)@!

解释:

  • \v 变得非常神奇:不需要很多反斜杠
  • % 符号是可选的(使括号中的组不匹配)
  • ( \d+(\.|,)@ :前面不带数字 然后 或 ,
  • \d@ :前面不带数字(确保我们在第一个数字
  • \d+@> :消耗所有数字(@> 确保,请参阅 :help /\@>
  • ((\.|,) \d)@! :之后没有点或逗号后跟数字。

You can try this:

\v%(\d+%(\.|,))@<!\d@<!\d+@>%(%(\.|,)\d)@!

Explanation:

  • \v turns very magic : no need of many backslashes
  • the % signs are optional (make groups in parentheses non-matching)
  • (\d+(\.|,)@<! : not preceded with digits then . or ,
  • \d@<! : not preceded with a digit (be sure we are at the first digit
  • \d+@> : consume all digits (@> ensures that, see :help /\@>)
  • ((\.|,)\d)@! : after that, no dot or comma followed by a digit.
烟酉 2024-11-25 11:58:42

尝试一下:

^(?!\d(\.|\,)?\d)(((\D*?)\d(\D*?))|(\d(\D* ?)\d))$

如果您需要解释,请告诉我。

Give this a whirl:

^(?!\d(\.|\,)?\d)(((\D*?)\d(\D*?))|(\d(\D*?)\d))$

And let me know if you'd like an explanation.

堇年纸鸢 2024-11-25 11:58:42

试试这个:

\(\d[\.,]\)\@<!\d\@<!\d\d\@!\([\.,]\d\)\@!

说明:

It looks for digits (\d) that are not preceeded by a '.' or ',' followed by a digit (\(\d[\.,]\)\@<!) or a single digit (\d\@<!), and is not followed by '.' or ',' followed by a digit (\([\.,]\d\)\@!) or a single digit (\d\@!).

这个是直接来自我的 vim,所以它应该可以在你的 vim 中工作。

Try this one:

\(\d[\.,]\)\@<!\d\@<!\d\d\@!\([\.,]\d\)\@!

Explanation:

It looks for digits (\d) that are not preceeded by a '.' or ',' followed by a digit (\(\d[\.,]\)\@<!) or a single digit (\d\@<!), and is not followed by '.' or ',' followed by a digit (\([\.,]\d\)\@!) or a single digit (\d\@!).

This one is straight from my vim so it should work in yours.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文