正则表达式匹配点分隔列表,允许一个或多个单词

Din*_*ino 0 c# regex

我需要一个允许输入字符串包含一个或多个单词的正则表达式,但列表必须仅用一个点分隔。例如:

test = OK
test.test = OK
test.test.1 = OK

test@test = NO
test_test = NO
test-test1 = NO
test. = NO
Run Code Online (Sandbox Code Playgroud)

我的正则表达式有效,但也接受其他符号,例如 -

^[a-z0-9*.\-_\.:]+$
Run Code Online (Sandbox Code Playgroud)

Joh*_*ohn 5

如果要确保它不以点开头或结尾,请使用 ^[a-zA-Z0-9]+(?:\.[a-zA-Z0-9]+)*$

解释:

  • ^ - 匹配输入的开头
  • [a-zA-Z0-9]+ - 匹配字母数字序列
  • (?: - 非捕获组的开始
    • \. - 匹配一个 .
    • [a-zA-Z0-9]+ - 匹配一个字母数字序列
  • ) - 关闭群组
  • * - 重复上一组任意次数
  • $ - 匹配输入结束

您也可以替换[a-zA-Z0-9][^\W_],因为这将匹配任何不是非单词也不是下划线的字符。基本上\w减去_字符。