正则表达式中的+和空格模式

3

我有以下的句子

"my hooorrrr sssee strongggg"

我的正则表达式是:

"(h+o+r+s+e+) s+t+r+o+n+g+"

只有当句子符合以下条件时,才被视为有效/匹配:

"my hooorrrrsssee strongggg"

有人可以帮忙吗?

我想匹配单词之间的任意空格。

example : "my h ooo rrr rss    se eee    stttro ngggg"

另一个问题是当某些字符被数字替代时,例如下面的情况:

"my h 0o0 rrr rs555sss    se ee333    stttr0 ngggg"

a replaced by 4
b replaced by 8
s replaced by 5
i replaced by 1
o replaced by 0

有人可以帮忙吗?谢谢。

horsestrong(horse和strong之间没有空格)也应该匹配吗? - Mark Byers
4个回答

5

使用*(空格、星号)来允许可选的空格。

(h[h ]*o[o ]*r[r ]*s[s ]*e[e ]*)s[s ]*t[t ]*r[r ]*o[o ]*n[n ]*g[g ]*

您可能还想考虑使用\s(包括制表符等)匹配任何空格,而不仅仅是空格。

要允许数字或字母,请使用字符类,例如[0o]

(h[h ]*[o0][o0 ]*r[r ]*[s5][s5 ]*[e3][e3 ]*)[s5][s5 ]*t[t ]*r[r ]*[o0][o0 ]*n[n ]*g[g ]*

感谢您的回答。当句子为“my h ooo rrr rss se eee stttro ngggg”时,“(h+ *o+ *r+ *s+ *e+) +s+ *t+ *r+ *o+ *n+ *g+”是有效的。 - Ahmad
但是当句子为“my h 0o0 rrr rs555sss se ee333 stttr0 ngggg”时,(h+ *[o0]+ *r+ *[s5]+ *[e3]+) +[s5]+ *t+ *r+ *[o0]+ *n+ *g+是无效的。 - Ahmad
当出现字母、空格、相同字母时,它就不匹配,例如 hooorss sseee - Billy Moon
Billy,它与“my h 0o0 rrr rs555sss se ee333 stttr0 ngggg”不匹配。 - Ahmad
这个正则表达式 "(h[h ][o 0 ]r[r ][s 5 ][e 3]) [s 5]*t[t ]r[r ][o 0]*n[n ]g[g ]" 的区别是什么? - Ahmad
这也将匹配 hrseh rsehrtrng - Billy Moon

1

更新 2

根据您问题中的信息,您可以使用以下方法(已更新以适应 Tim Pietzcker 指出的情况!):

[h][h ]*[o0][o 0]*[r][r ]*[s][s 5]*[e3][e 3]*[s5][s 5]*[t][t ]*[r][r ]*[o0][o 0]*[n][n ]*[g][g ]*

我刚意识到这使得答案与Mark Byers相同!


但它允许输入任何数字单词,我只想要一个在我的问题中列出的替换数字 :) - Ahmad
请注意,您还可以通过将\d(任何数字0-9)与字母交换,例如[e 3]+,来限制每个字母允许的数字。 - Gaijinhunter
这也匹配12345678901h r e t o g等许多内容。 - Tim Pietzcker
固定的,以匹配特定的示例。原来的答案意在更为一般化,以便OP可根据需要进行修改。对于造成的混淆,我们感到抱歉。 - Gaijinhunter
它仍然匹配完全由空格组成的字符串(以及许多其他无效的字符串)。 - Tim Pietzcker

1

这将匹配每个字母,后面跟零个或多个相同的字母或空格

h[h ]*o[o ]*r[r ]*s[s ]*e[e ]*s[s ]*t[t ]*r[r ]*o[o ]*n[n ]*g[g ]*

使用您指定的数字... (e = 3, o = 0, s = 5)

h[h ]*[o0][o 0]*r[r ]*[s5][s 5]*e[e 3]*[s5][s 5]*t[t ]*r[r ]*[o0][o 0]*n[n ]*g[g ]*

+1:接近了,但是它在'0o0'上失败了,因为数字先出现。 - Mark Byers
现在我认为它匹配所有情况,是的。 - Mark Byers

1

如果你想匹配空格,那么你需要在正则表达式中包含它。 \s 是匹配空格字符的模式(即空格、制表符、换行符)。

r+ 将匹配一个或多个 r 字符,但不会查找空格。

r+\s* 将匹配一个或多个 r 字符,后面跟着零个或多个空格字符。

你可以从这里构建你的表达式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接