正则表达式 - 匹配一个包含零或一个空格的字符串

9

我正在尝试匹配一个以 @ 开头的字符串,可以包含任意数量的字母或数字,但最多只能包含一个空格(或零个空格)。 到目前为止,我的代码如下:

@([A-Za-z0-9]+)

这个问题需要匹配字符但不能包含空格。我认为我需要使用\s{0,1},但是不确定应该放在哪里。有人能帮忙吗?

谢谢。


2
字符串可以是 abc[空格] 吗?也就是说,它可以以空格结尾吗? - TheLostMind
1
或者可以直接开始翻译。 - Adam Yost
4个回答

12
假设您只关心单词中的空格,而不是前导或尾随的空格,则可以使用以下代码:
@[A-Za-z0-9]* ?[A-Za-z0-9]*

解释:

@ 以字面意义的 @ 开始

[A-Za-z0-9] 任何字母或数字

* 字母或数字可以为长度 {0,无穷大}

? 空格字符,出现0次或1次

[A-Za-z0-9]* 如果有空格,则是任意数量的尾随字母或空格


功能良好,但仅适用于“matches”方法。(然而,在当前情况下,我看不到使用其他方法的理由) - Casimir et Hippolyte
1
仅匹配@符号。 - Avinash Raj
1
@AvinashRaj:是的,但问题说:“任意数量的字母或数字”。 - Casimir et Hippolyte
“matches” 只是在前面加上了 “^”,在后面加上了 “$”。我有意留下它们,以便可以与 “matches” 和 “find” 一起使用。 - Adam Yost
@AdamYost:如果你使用find方法,这些锚非常重要,否则你将会为每个符合模式的子字符串得到一个结果。例如,对于abc@def,如果你不使用锚,find方法将返回@def - Casimir et Hippolyte
我知道,但锚将您绑定到要搜索的字符串是完整行。假设他们的字符串是:s =“我正在寻找id = @abc def今天,希望我能找到它!”Find会返回 @abc def,而匹配将返回 false - Adam Yost

1
您可以尝试以下正则表达式来匹配以@开头的单词,后跟任意数量的字母或数字,并带有可选空格。
^@[a-zA-Z0-9]+ ?[a-zA-Z0-9]*$

DEMO

Java模式将是:

"^@[a-zA-Z0-9]+ ?[a-zA-Z0-9]*$"

@Braj 未能更新演示链接。现在看起来没问题了。 - Avinash Raj
\s 也允许制表符和换行符。如果它们只允许空格,那就不好了,因为它将接受 \t\n - Adam Yost

0

您可以使用带有负向先行断言的正则表达式:

^@((?!(?:\S* ){2})[A-Za-z0-9 ]+)$

0

这是你需要的吗?

@[A-Za-z0-9]+(?:\s?)[A-Za-z0-9]+

在线演示


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