【发布时间】:2016-03-23 22:07:43
【问题描述】:
我很难使用正则表达式。
唯一的要求是,如果单词中有点 (.),点的两边必须有一个字母。单词中可以有任意数量的点,点之间可以有任意数量的字母。点的两边必须有一个字母。
我已经大致弄清楚了,但我遇到了仅由一个字母分隔的点的问题(请参见下面的示例)
目前我有这样的表达方式:
^(\s*[0-9A-Za-z]{1,}[.]{0,1}[0-9A-Za-z]{1,}\s*)+$
这适用于以下情况:
- dot.InWord
- Multiple.dots.In.Word
- d.ot.s
- t.wo.Le.tt.er.sB.et.we.en.do.ts
但是,如果点仅由一个字母分隔,则这不适用于单词,如下所示:
- d.o.t.s.O.n.l.y.S.e.p.e.r.a.t.e.d.B.y.O.n.e.L.e.t.t.e.r
有谁知道我该如何解决这个问题?
编辑:
下面的 BHustus 解决方案是更好的解决方案。
但是,我确实采用了 BHustus 展示的内容,并将其与我之前的内容结合起来,想出了一个不那么“令人困惑”的模式,以防万一其他人感兴趣。
^(\s*[\d\w]+([.]?[\d\w]+)+\s*)+$
关键是要有 .并且在其自己的组中并重复之后的1个单词。 ([.]?[\d\w]+)+
谢谢。
【问题讨论】:
-
那么你到底想做什么?匹配由任意数量的字母分隔的任意数量的点的整个单词?
-
是的,很抱歉,将问题编辑得更清楚
-
字母之间可以有两个点吗?
-
字母之间只有1个点