x = r"abc"
y = r"def"
z = join([x,y], "|")
z # => r"r\"abc\"|r\"def\""
有没有一种方法可以连接(并且通常操作)仅处理正则表达式内容的Regex
(即不将r
修饰符视为其内容的一部分)。对于z
的期望输出是:
z # => r"abc|def"
macro p_str(s) s end
x = p"abc"
y = p"def"
z = Regex(join([x,y], "|"))
r“quote”操作符实际上会为您编译一个正则表达式,这需要时间。如果您只想使用正则表达式的某些部分来构建更大的表达式,则应使用“普通引号”存储这些部分。
但是,关于r“quote”与“普通引号”之间模糊的转义规则呢?如果您想要r“quote”的模糊规则,但又不想立即编译正则表达式,则可以使用宏,例如:
macro p_str(s) s end
现在你有一个像r"引号"一样转义但只返回字符串的p"引号"。
不要跑题,但你可能定义了一些引号来绕过棘手的字母表。这里有一些方便的引号:
# "baked\nescape" -> baked\nescape
macro p_mstr(s) s end # p"""raw\nescape""" -> raw\\nescape
macro dq_str(s) "\"" * s * "\"" end # dq"with quotes" -> "with quotes"
macro sq_str(s) "'" * s * "'" end # sq"with quotes" -> 'with quotes'
macro s_mstr(s) strip(lstrip(s)) end # s""" "stripme" """-> "stripme"
myre = Regex(join([x, y], "|"))
就像您想的那样。
如果您想了解一个对象拥有哪些成员(例如Regex.pattern),请尝试:
julia> dump(r"pat")
Regex
pattern: ASCIIString "pat"
options: Uint32 33564672
regex: Array(Uint8,(61,)) [0x45,0x52,0x43,0x50,0x3d,0x00,0x00,0x00,0x00,0x28 … 0x1d,0x70,0x1d,0x61,0x1d,0x74,0x72,0x00,0x09,0x00]
dump()
),但我已经明白了,我可以通过操作字符串部分并调用Regex()
来构造正则表达式。然而,我具体的场景是当有正则表达式而不是字符串时。我想在这种情况下你必须使用pattern
。 - Sean Mackesey与其加入正则表达式,我认为最好的方法是将字符串连接起来,然后将结果转换为正则表达式。这样,您可以按照以下方式解决问题:
x = "abc"
y = "def"
z = Regex(join([x,y], "|"))
println(z)
r"abc|def"
作为输出。
Regex(join([x.pattern,y.pattern], "|"))
,但那不太好看,而且我不知道它在更复杂的情况下会表现如何。 - DSMpattern
属性! - Sean Mackesey