Find and Replace specific character in a specific string
-
Hi,
I have a text:
way 150841940
highway = residential
name = ‘Smith 120’
name:fr = ‘Simon 120’
nd 1637110349
nd 1637110360
Then I want to replace any digit in lines which have "name = " in it with another character, and I don’t want any digit in other places be replaced.
for example, I want replace 1 with X then :
name = ‘Smith 120’ --------> name = ‘Smith X20’
but name:fr = ‘Simon 120’ --------> no change
and nd 1637110349-------->no change -
Hello Saeed-Ghazi-Joolaee,
from the provided example I assume that Smith 120 is surrounded by a single quote.
Open replace dialog and check regular expression in search mode.
The regex which needs to be used is(.*name = ')(.* )(\d+)(')
which should result in 4 groups
\1: name = ' \2: Smith \3: 120 \4: '
what means the replace dialog needs to be used like
Find what :(.*name = ')(.* )(\d+)(') Replace with :\1\2xxx\4
which would then result in
way 150841940 highway = residential name = 'Smith xxx' name:fr = 'Simon 120' nd 1637110349 nd 1637110360
Cheers
Claudia -
Thanks Claudia,
But I mean something else. I have numerouse sequence of this text block with different “names” which have different numbers in them. I want to replace “1” in all names with “X”, '2" with “Y”, and “3” with “Z” …9
way 35103881
name = ‘4/2’
nd 411824630
nd 717069654way 152126825
name = ‘2nd Street’
nd 1649547187
nd 1649547183
nd 1649547177way 191544328
name = ‘Joe 618’
nd 2021290076
nd 2021290075
nd 2021290074
nd 2021290073way 191544409
name = ‘John 13’
nd 2021290720
nd 2021290719(Excuse me for long Example)
How can I replace one by one digit with my desired letters in “name” lines. Maybe with help of Marked lines this could be done, isn’t it?
-
Hello Saeed-Ghazi-Joolaee
still having problems to understand the logic which needs to be used.
I understand only the line with name = is of interested.
Can we safely assume that the value which needs to be changed is surrounded by single quotes?
Is the first digit,which needs to be replaced, strictly mapped to a letter ?
The provided examplename = ‘4/2’ needs to be changed to something like name=‘Y/2’
and
name = ‘Joe 618’ to something like name = ‘Joe R18’Correct?
Cheers
Claudia -
Hello Claudia,
Thanks for your contribution,
Exactly, I want to replace Latin numbers with Persian numbers. For your convenience, I used here Latin letters.I must do it digit by digit, because I don’t know which numbers is used in my text (I can’t do it from 0 to 9999999999…, Thus, It’s better done digit by digit from 0 to 9). And I want only to replace numbers in name = lines not other numbers - which must be in English intact.
@ Can we safely assume that the value which needs to be changed is surrounded by single quotes?
quotes are not important at all.@ name = ‘Joe 618’ to something like name = ‘Joe R18’
Correct?
Exactly. Finally after replacing all 9 digits I want name = ‘Joe RAV’Thanks in advance.
-
Hello @Saeed-Ghazi-Joolaee
quotes are not important at all.
they are important as I use a regualr expression based on the existance of the single quotes.You need to run the regex 10 times, for each digit one run.
You build 4 groups ( ), where as group 3 is the number you are looking for
Something like(.*name = ')(.*)(8)(.*')
and replace with
\1\2V\4
The letter which is used as replacement is between group \2 and \4 without spaces.
I hope this does what you are looking for.
Cheers
Claudia -
Hi Claudia,
Thanks for your kind help. I almost reached my destination. The only thing is that for numbers which have equal digits like 33 or 333 I must search two or three times to complete my replacement. As far as my numbers are maximum 3 digit numbers, this in no matter.
Cheers.