正则表达式在中间有 @ 字符

Posted

技术标签:

【中文标题】正则表达式在中间有 @ 字符【英文标题】:Regex having @ character on the middle 【发布时间】:2020-11-30 17:45:02 【问题描述】:

尝试在 C# 中创建一个函数来验证字符串是否通过这些规则

@

基本保证中间有@符号

通过

a@a
1@1
a@1
1@a
11@aa
#!@#1a!#a
1@dasdas2!#

失败

1a@!  fails because alphanumeric character should be besided @
!@ada fails because alphanumeric character should be besided @
a@a@b fails because has 2 @
a@    fails no character on the right
@b    fails no character on the left
@     fails no character beside @

【问题讨论】:

你能展示一下你的尝试吗? 您的描述与您的输入不匹配 @TheGeneral 请详细说明。 当你说“@”以及其他奇怪的东西时,这如何传递#!@#1a!#a 【参考方案1】:

听起来你正在寻找这样的东西:

^[^@]?[A-Za-z0-9]+@[A-Za-z0-9]+[^@]?$

但是,正如 cmets 中已经提到的,您的最后两个“通过”输入与您的规则不匹配 - #!@#1a!#a@ 之前缺少字母数字字符,并且在除第一个和最后一个字符。 1@dasdas2!# 末尾有两个符号,但规则规定 ! 无效,因为它不是字母数字。

请注意,“字母数字”可能表示不同的含义,具体取决于语言环境。在上面,我按字面意思理解为 A-Z、a-z 和 0-9,但还有许多其他字符是“字母”或“数字”。 \w 可能是更好的替代品,如果您的正则表达式变体支持它(您没有指定变体),但通常,\w 也允许使用下划线 (_)。如果课程不是“字母数字”,那么您需要前瞻性的断言来禁止_(同样,这将是特定于变体的,因为正则表达式在实现中并未完全标准化)。

【讨论】:

这似乎不允许点作为符号 它似乎不允许使用符号 1b2!a3@qad11# 这应该可以。 拜伦,这将允许“。”作为我所知道的任何正则表达式变体的符号。并且“1b2!a3@qad11#”不符合您所说的规则,因为“!”符号位于第一部分的中间,而不是字符串的开头或结尾。这是我上面写的测试模式的 URL:regex101.com/r/O7PlFX/1

以上是关于正则表达式在中间有 @ 字符的主要内容,如果未能解决你的问题,请参考以下文章

求一个匹配 以指定字符开头,指定字符结尾,中间内容任意的正则表达式

求一个匹配 以指定字符开头,指定字符结尾,中间内容任意的正则表达式

求一个匹配 以指定字符开头,指定字符结尾,中间内容任意的正则表达式

求一个匹配 以指定字符开头,指定字符结尾,中间内容任意的正则表达式

仅使用正则表达式在字符串中查找中间字符

是否有正则表达式来掩盖动态字母数字字符串的中间区域?