# Similar strings

**URL:** https://discourse.julialang.org/t/similar-strings/74571
**Category:** New to Julia
**Tags:** strings
**Created:** [January 13, 2022, 7:09pm UTC](https://discourse.julialang.org/t/similar-strings/74571 "2022-01-13T19:09:08Z")
**Posts on this page:** 6
**Page:** 1

<div class="post-metadata">

### Author: ![cesarmarinhorj](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/cesarmarinhorj/32/30948_2.png) [@cesarmarinhorj](https://discourse.julialang.org/u/cesarmarinhorj)
#### Post date: [January 13, 2022, 7:09pm UTC](https://discourse.julialang.org/t/similar-strings/74571/1 "2022-01-13T19:09:08Z")

</div>

When importing data, there are many “similar” labels, like:  
“T-012”, “T-12”, “T12” and “T012”.  
All are the same, must choose one and discard the others.  
Levenshtein distance could resolve this?  
And why Levenshtein in Julia was abandoned?  
thanks!

---

<div class="post-metadata">

### Author: ![juliohm](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/juliohm/32/215266_2.png) [@juliohm](https://discourse.julialang.org/u/juliohm)
#### Post date: [January 13, 2022, 7:14pm UTC](https://discourse.julialang.org/t/similar-strings/74571/2 "2022-01-13T19:14:56Z")

</div>

I usually rely on regex to remove the redundancy. Julia has built-in regex support in case you know how to use it:

```julia
match(r"T[-0]*\d+", label)

```

If you are not familiar with regex syntax, you can take a look at:

[https://github.com/jkrumbiegel/ReadableRegex.jl](https://github.com/jkrumbiegel/ReadableRegex.jl)

Finally, there is

[https://github.com/matthieugomez/StringDistances.jl](https://github.com/matthieugomez/StringDistances.jl)

for distances between strings.

---

<div class="post-metadata">

### Author: ![Jeff\_Emanuel](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jeff_emanuel/32/15440_2.png) [@Jeff\_Emanuel](https://discourse.julialang.org/u/Jeff_Emanuel)
#### Post date: [January 13, 2022, 8:03pm UTC](https://discourse.julialang.org/t/similar-strings/74571/3 "2022-01-13T20:03:05Z")

</div>

> [@cesarmarinhorj](#):
>
> Levenshtein distance could resolve this?

Unlikely. You’ll get the same distance between labels you think are similar and labels you think are distinct. For example (T-12,T12) and (T-12,T212) have the same distance. It’s better to rely on patterns you know are in similar labels as @juliohm suggests

---

<div class="post-metadata">

### Author: ![cesarmarinhorj](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/cesarmarinhorj/32/30948_2.png) [@cesarmarinhorj](https://discourse.julialang.org/u/cesarmarinhorj)
#### Post date: [January 13, 2022, 8:13pm UTC](https://discourse.julialang.org/t/similar-strings/74571/4 "2022-01-13T20:13:40Z")

</div>

thanks!

---

<div class="post-metadata">

### Author: ![cesarmarinhorj](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/cesarmarinhorj/32/30948_2.png) [@cesarmarinhorj](https://discourse.julialang.org/u/cesarmarinhorj)
#### Post date: [January 13, 2022, 8:15pm UTC](https://discourse.julialang.org/t/similar-strings/74571/5 "2022-01-13T20:15:20Z")

</div>

yes… the same distance in all cases… 1 char to change…  
thanks!

---

<div class="post-metadata">

### Author: ![rafael.guerra](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rafael.guerra/32/216610_2.png) [@rafael.guerra](https://discourse.julialang.org/u/rafael.guerra)
#### Post date: [January 13, 2022, 10:36pm UTC](https://discourse.julialang.org/t/similar-strings/74571/6 "2022-01-13T22:36:27Z")

</div>

FWIW, an alternative to regex:

```julia
uniquetag(s) = s[1:findfirst(!isletter,s)-1] * string(parse(Int,s[findfirst(isdigit,s):end]))

tags = ["T-012","T-12","T12","T012","S-0","S0","S01","S-1"]
uniquetag.(tags)

 "T12"
 "T12"
 "T12"
 "T12"
 "S0"
 "S0"
 "S1"
 "S1"

```
