Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 减少格式化字符串中的冗余(节)_Regex_String Formatting_Stanza - Fatal编程技术网

Regex 减少格式化字符串中的冗余(节)

Regex 减少格式化字符串中的冗余(节),regex,string-formatting,stanza,Regex,String Formatting,Stanza,我正在为正则表达式相关的操作从一些基本字符串中手工制作许多字符串,我想知道是否有一种不那么冗长的方法来编写这个 我的基本字符串有: val ALPHA = "[a-zA-Z]" val ODD = "[13579]" val EVEN = "[02468]" val INEQ = "[<>]" 理想情况下,我可以写一些关于 evaluate-template $ "Today's math l

我正在为正则表达式相关的操作从一些基本字符串中手工制作许多字符串,我想知道是否有一种不那么冗长的方法来编写这个

我的基本字符串有:

val ALPHA = "[a-zA-Z]"
val ODD = "[13579]"
val EVEN = "[02468]"
val INEQ = "[<>]"
理想情况下,我可以写一些关于

evaluate-template $ "Today's math lesson is ({ODD}) {INEQ} ({ODD}|{EVEN})"

我认为对于编写正则表达式这样的问题,您可能需要比格式化字符串更健壮的东西。例如,声明正则表达式类型:

deftype Regex:
  String <: Regex

defstruct AnyOf <: Regex:
  regexes:Tuple<Regex>

defmethod print (o:OutputStream, a:AnyOf):
  val rs = regexes(a)
  val last = length(rs) - 1
  print(o, "(%*|%_)" % [rs[0 to last], rs[last]])
  
defstruct AllOf <: Regex:
  regexes:Tuple<Regex>

defmethod print (o:OutputStream, a:AllOf):
  print(o, "%*" % [regexes(a)])

defstruct AtLeastOne  <: Regex:
  regex:Regex

defmethod print (o:OutputStream, a:AtLeastOne):
  print(o, "%_+" % [regex(a)])

defstruct ZeroOrMore <: Regex:
  regex:Regex

defmethod print (o:OutputStream, a:ZeroOrMore):
  print(o, "%_*" % [regex(a)])

val ALPHA: Regex = "[a-zA-Z]"
val ODD  : Regex = "[13579]"
val EVEN : Regex = "[02468]"
val INEQ : Regex = "[<>]"

println(AllOf(["Today's math lesson is ", ODD, " ", INEQ, " ", AnyOf([ODD, EVEN])]))
deftype正则表达式:
一串
deftype Regex:
  String <: Regex

defstruct AnyOf <: Regex:
  regexes:Tuple<Regex>

defmethod print (o:OutputStream, a:AnyOf):
  val rs = regexes(a)
  val last = length(rs) - 1
  print(o, "(%*|%_)" % [rs[0 to last], rs[last]])
  
defstruct AllOf <: Regex:
  regexes:Tuple<Regex>

defmethod print (o:OutputStream, a:AllOf):
  print(o, "%*" % [regexes(a)])

defstruct AtLeastOne  <: Regex:
  regex:Regex

defmethod print (o:OutputStream, a:AtLeastOne):
  print(o, "%_+" % [regex(a)])

defstruct ZeroOrMore <: Regex:
  regex:Regex

defmethod print (o:OutputStream, a:ZeroOrMore):
  print(o, "%_*" % [regex(a)])

val ALPHA: Regex = "[a-zA-Z]"
val ODD  : Regex = "[13579]"
val EVEN : Regex = "[02468]"
val INEQ : Regex = "[<>]"

println(AllOf(["Today's math lesson is ", ODD, " ", INEQ, " ", AnyOf([ODD, EVEN])]))
Today's math lesson is [13579] [<>] ([13579]|[02468])