x = r"abc"
y = r"def"
z = join([x,y], "|")
z # => r"r\"abc\"|r\"def\""
有没有一种方法
join
(并且通常可以操作)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”和“regular quotes”得到的粗略转义规则又如何呢?如果您想要粗略的r“quote”规则,但又不想立即编译正则表达式,则可以使用如下宏:
macro p_str(s) s end
现在,您有了一个p“quote”,它像r“quote”一样转义,只是返回了一个字符串。
不想超出主题范围,但是您可以定义一些引号来避开棘手的字母。这里有一些方便的方法:
# "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]
关于regex - 在Julia中加入正则表达式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20478823/