# Regular Expressions - Can't Insert \\t in Replacement String

**URL:** https://discourse.julialang.org/t/regular-expressions-cant-insert-t-in-replacement-string/7419
**Category:** General Usage
**Created:** [November 30, 2017, 8:02pm UTC](https://discourse.julialang.org/t/regular-expressions-cant-insert-t-in-replacement-string/7419 "2017-11-30T20:02:38Z")
**Posts on this page:** 10
**Page:** 1

<div class="post-metadata">

### Author: ![MLackner](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mlackner/32/2789_2.png) [@MLackner](https://discourse.julialang.org/u/MLackner)
#### Post date: [November 30, 2017, 8:02pm UTC](https://discourse.julialang.org/t/regular-expressions-cant-insert-t-in-replacement-string/7419/1 "2017-11-30T20:02:38Z")

</div>

Hi!  
I’m not an expert in regular expressions and this seems like a trivial problem to me. Unfortunatley I couldn’t find anything by googling.

Problem: I want to replace a `\s` in a regular expression with `\t`. This is what I tried:

```julia
replace("x 3", r"x (?<x>\d*)", s"y\t\g<x>")

```

But I get a `Bad replacement string` error. Also other special characters like `\s` and '\n`don't work. Am I missing something or doing something wrong? Unfortunatley things like`s"\t"`yield a literal`"\t"`.

---

<div class="post-metadata">

### Author: ![kristoffer.carlsson](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kristoffer.carlsson/32/22_2.png) [@kristoffer.carlsson](https://discourse.julialang.org/u/kristoffer.carlsson)
#### Post date: [November 30, 2017, 8:07pm UTC](https://discourse.julialang.org/t/regular-expressions-cant-insert-t-in-replacement-string/7419/2 "2017-11-30T20:07:17Z")

</div>

Have you tried escaping the `\`?

---

<div class="post-metadata">

### Author: ![MLackner](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mlackner/32/2789_2.png) [@MLackner](https://discourse.julialang.org/u/MLackner)
#### Post date: [November 30, 2017, 9:16pm UTC](https://discourse.julialang.org/t/regular-expressions-cant-insert-t-in-replacement-string/7419/3 "2017-11-30T21:16:04Z")

</div>

Oh sorry something went wrong with the format there…  
Typing `s"y\t\g<x>"` yields an error `s"y\\t\g<x>"` yields `s"y\\\\t\\g<x>"`.

---

<div class="post-metadata">

### Author: ![Dan](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dan/32/42581_2.png) [@Dan](https://discourse.julialang.org/u/Dan)
#### Post date: [December 1, 2017, 2:43am UTC](https://discourse.julialang.org/t/regular-expressions-cant-insert-t-in-replacement-string/7419/4 "2017-12-01T02:43:21Z")

</div>

Writing explicitly `Base.SubstitutionString("y\t\\g<x>")` might be a workaround.

---

<div class="post-metadata">

### Author: ![MLackner](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mlackner/32/2789_2.png) [@MLackner](https://discourse.julialang.org/u/MLackner)
#### Post date: [December 1, 2017, 7:42am UTC](https://discourse.julialang.org/t/regular-expressions-cant-insert-t-in-replacement-string/7419/5 "2017-12-01T07:42:32Z")

</div>

That does indeed work. Thank you!

---

<div class="post-metadata">

### Author: ![ScottPJones](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/scottpjones/32/146_2.png) [@ScottPJones](https://discourse.julialang.org/u/ScottPJones)
#### Post date: [December 1, 2017, 1:22pm UTC](https://discourse.julialang.org/t/regular-expressions-cant-insert-t-in-replacement-string/7419/6 "2017-12-01T13:22:26Z")

</div>

The issue is really that the s"…" and r"…" strings have their own syntax, which is not compatible with the normal string escaping.  
You’d need to either put the tab in directly (which makes it hard to read), or use @dan’s workaround (which is what I’ve done in the past)

---

<div class="post-metadata">

### Author: ![Dan](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dan/32/42581_2.png) [@Dan](https://discourse.julialang.org/u/Dan)
#### Post date: [December 1, 2017, 1:38pm UTC](https://discourse.julialang.org/t/regular-expressions-cant-insert-t-in-replacement-string/7419/7 "2017-12-01T13:38:44Z")

</div>

A better version of the workaround is `@s_str("y\t\\f<x>")`. Calling the macro directly without the tagged string literal, causes the string to be parsed with the regular escaping. Much shorter code.

The whole line is now:

```julia
println(replace("x 3", r"x (?<x>\d*)", @s_str("d\t\\g<x>")))

```

---

<div class="post-metadata">

### Author: ![ScottPJones](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/scottpjones/32/146_2.png) [@ScottPJones](https://discourse.julialang.org/u/ScottPJones)
#### Post date: [December 1, 2017, 3:14pm UTC](https://discourse.julialang.org/t/regular-expressions-cant-insert-t-in-replacement-string/7419/8 "2017-12-01T15:14:08Z")

</div>

That’s a nice general technique!

---

<div class="post-metadata">

### Author: ![Liso](https://avatars.discourse-cdn.com/v4/letter/l/898d66/32.png) [@Liso](https://discourse.julialang.org/u/Liso)
#### Post date: [December 1, 2017, 10:06pm UTC](https://discourse.julialang.org/t/regular-expressions-cant-insert-t-in-replacement-string/7419/9 "2017-12-01T22:06:52Z")

</div>

Maybe I am wrong but still have feeling this is a bug:

```julia
julia> macro tst_str(string) println([i for i in string]) end;
# so far so good:
julia> @tst_str("a")
['a']
julia> tst"a"
['a']
# this is probably wanted to help create raw_str:
julia> @tst_str("\\a")
['\\', 'a']
julia> tst"\\a"
['\\', '\\', 'a']
# but there is a problem to add backslash at the end of string:
julia> @tst_str("a\\")
['a', '\\']
julia> tst"a\\"
['a', '\\', '\\']
julia> tst"a\" # 3times <enter> in REPL
ERROR: syntax: incomplete: invalid string syntax

```

Maybe enhance syntax for string macros could help? I mean something like:

```julia
macro a_str(a) # for raw "escaping"
macro a_estr(a) # for standard escaping

# but macros above would have problem with name clash... 
a"how to interpret this o\ne?"
```

---

<div class="post-metadata">

### Author: ![Liso](https://avatars.discourse-cdn.com/v4/letter/l/898d66/32.png) [@Liso](https://discourse.julialang.org/u/Liso)
#### Post date: [December 18, 2017, 1:04am UTC](https://discourse.julialang.org/t/regular-expressions-cant-insert-t-in-replacement-string/7419/10 "2017-12-18T01:04:40Z")

</div>

> [@Liso](#):
>
> ```julia
> julia> tst"a\\"
> ['a', '\\', '\\']
> 
> ```

🎉 At least Julia 0.7.0-DEV.2815:

```julia
julia> tst"a\\"
['a', '\\']

```
