我将如何匹配正则表达式与未知长度的字符串,但在一个特定的模式?



我很难弄清楚我的正则表达式有什么问题,可以是任何长度的字符串,但总是遵循下面的模式

"(A,B)" = valid
"(A,B) (B,C)" = valid

基本上,括号"(", a - z字母,逗号,a - z字母,括号")"空格当且仅当序列再次开始时,否则没有空格。

到目前为止,我已经得到了"^\([A-Z]?,[A-Z]?\)*.\([A-Z]?,[A-Z]?\).*$",但我不确定我的正则表达式是不正常工作的。

你可以使用正则表达式,

^(?:s?([A-Z],[A-Z])(?:s([A-Z],[A-Z]))?)*$

演示描述:

  • ^:断言行起始位置
  • (?::非抓包组启动
    • s?:可选的空白字符
    • (:字符(
    • [A-Z]:字符,AZ
    • ,:字符,
    • [A-Z]:字符,AZ
    • ):字符(
    • (?::非抓包组启动
      • s([A-Z],[A-Z]): Pattern已经在上面解释了
    • ):非捕获组结束
    • ?:使最后一个非捕获组可选
  • ):非捕获组结束
  • *:在0到无限次之间匹配前一个令牌
  • $:在行末断言位置

一个更好的解决方案(礼貌:第四只鸟):

您也可以选择在第一次匹配后重复n组,即

^([A-Z],[A-Z])(?: ([A-Z],[A-Z]))*$

演示

试试这个…

([(]([A-Z]),([A-Z])[)])(s[(]([A-Z]),([A-Z])[)])*
final String regex = "([(]([A-Z])\,([A-Z])[)])(\s[(]([A-Z])\,([A-Z])[)])*";

最新更新