macro p_str(s) s end
x = p"abc"
y = p"def"
z = Regex(join([x,y], "|"))
L'operatore r "quote" compila in realtà un'espressione regolare per voi che richiede tempo. Se si dispone solo di parti di un'espressione regolare che si desidera utilizzare per crearne una più grande, è necessario memorizzare le parti utilizzando "virgolette normali".
Ma che dire delle regole di escape che si ottengono con r "quote" rispetto a "virgolette normali" che chiedi? Se si desidera che le r regole ma non abbozzati "quote" per compilare immediatamente un'espressione regolare quindi è possibile utilizzare una macro simile:
macro p_str(s) s end
Ora avete ap "quote" che sfugge come un "quote" r, ma solo restituisce una stringa.
Non andare fuori tema ma è possibile definire un sacco di citazioni per aggirare alfabeti difficili. Ecco alcuni tra quelli convenienti:
# "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"
Quando hai finito di fare i frammenti si può fare il vostro unirsi e fare una regex come:
myre = Regex(join([x, y], "|"))
Proprio come si pensava.
Se volete saperne di più su ciò che i membri di un oggetto ha (come ad esempio Regex.pattern) provare:
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]
Qual è la produzione che stai ricevendo? –
@UriMikhli È l'ultima riga del primo blocco di codice. –
Bene, c'è 'Regex (join ([x.pattern, y.pattern]," | "))', ma non è molto carino, e non so come si comporterebbe in casi più complessi. – DSM