请教这个正则表达式应该如何实现(可能存在)

2020-02-12 15:40:29 +08:00
 uti6770werty

如下字符:

$12-16$
$  88-99$
$ 12-67  $
$9-0]$

我写的这个正则:

\$\d+.*-\d+.*$

只能匹配
$12-16$
$9-0]$

最终目的是想匹配两个$号之间的内容(包括$本身),
但有些比较特殊,开始$之后,也许可能存在空白,如:$ 88-99$,
结束的$之前,也许也有空白,如:$ 12-67 $
这种有空白的“或许”的正则,写不出来,麻烦各位高手赐教,谢谢!

1552 次点击
所在节点    问与答
10 条回复
daquandiao2
2020-02-12 15:49:02 +08:00
\$\s*\d+-\d+.*\$
asionbo
2020-02-12 15:49:32 +08:00
这样的?
\$.*\$
Hyseen
2020-02-12 15:50:28 +08:00
\$.*\$
b1iy
2020-02-12 16:05:19 +08:00
不是很确定你完整的需求。\s 是匹配空格,\S 是匹配非空格,不确定空格数量就可以 \s* ,你自己推导下
具体参考 https://deerchao.cn/tutorials/regex/regex.htm 实现
uti6770werty
2020-02-12 16:13:21 +08:00
谢谢各位~

"\$.*\$" 的方式比较粗暴,会误匹配(像:$测试文字$),所以我才需要增加\d 和匹配有“-”符号来降低误匹配的可能性

@b1iy \s*也不适合,有情况是:没有空格,如上面的$12-16$,这个是紧凑型了

就是有\s*或者没有\s,两种情况都要兼顾。。。
uti6770werty
2020-02-12 18:02:50 +08:00
或的关系,按教学网页,应该是|符号
尽管我试过用
\$[\s*|]\d+.*-\d+.*$
\$(\s*|)\d+.*-\d+.*$
始终不成。。。
eason1874
2020-02-12 18:19:33 +08:00
你这长篇大论都没说到关键点,我看你帖子描述跟上面回复一样,误以为你匹配$$之间所有内容,看你回复才发现你要匹配的不包括中文。

你应该说明$$可能有什么内容,允许什么内容,不允许什么内容,要匹配什么内容。给你几个例子:

一、$$之间包括空格、数字: /\$(?:\s|[0-9])+\$/
二、$$之间包括空格、-、数字: /\$(?:\s|\-|[0-9])+\$/
三、$$之间包括空格、-、]、数字: /\$(?:\s|\-|\]|[0-9])+\$/

自己举一反三吧。
lysS
2020-02-12 18:52:23 +08:00
禁用贪婪
mxalbert1996
2020-02-13 00:41:58 +08:00
你连你到底相匹配什么都不说清楚让我们猜呢?
mxalbert1996
2020-02-13 00:47:55 +08:00
提示一下,匹配任意数量(包括 0 )空白字符用 \s* 就行

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/644046

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX