gpt4 book ai didi

c# - 带条件重复的正则表达式

转载 作者:行者123 更新时间:2023-11-30 16:57:52 26 4
gpt4 key购买 nike

我有以下正则表达式:

^((_[a-zA-Z0-9]|[a-zA-Z])+((?<bracket>\[)[0-9]+(?<-bracket>\])(?(bracket)(?!)))?)$

如果有一个点 (.),我希望它重复

我知道我可以重复这样的表达式并添加点 (.)

^((_[a-zA-Z0-9]|[a-zA-Z])+((?<bracket>\[)[0-9]+(?<-bracket>\])(?(bracket)(?!)))?)(\.((_[a-zA-Z0-9]|[a-zA-Z])+((?<bracket>\[)[0-9]+(?<-bracket>\])(?(bracket)(?!)))?))*$

但我想知道是否有更好的方法,而不是复制初始部分。

背景:

我需要访问一台使用基于标签寻址的机器 Micrologix 5000。在 C# 应用程序中,我想验证用户输入的地址是否正确。

允许:

  • Dog.Tail
  • 狗[0].Tail.IsMoving

不允许:

  • 狗。
  • 狗[0].

最佳答案

你可以使用递归。看这个:

^((_[a-zA-Z0-9]|[a-zA-Z])+((?<bracket>\[)[0-9]+(?<-bracket>\])(?(bracket)(?!)))?)(\.\1)*$
^^
  • \1 递归第一个捕获组 ( ) 中的第一个子模式。

但是,这比您尝试的正则表达式效率低两步,这对于这种情况是最佳的。此处可以使用递归来提高其可读性,但不推荐这样做。

关于c# - 带条件重复的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25975999/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com