Deleting specific string from entire xml file?
-
I know it sounds easy enough but its not in my case. I am trying to edit a massive xml file, Im modding the game “7 Days to Die”. Throughout the file there are strings called <entityGroup=“spiderZombie” prob=“xxx”/> but the prob is a different number in each one. Therefore, I cannot simply search and replace. If i did it would still have to have the remainder, and would leave the end parts prob=“xxx”/> all over the place.
Is there any way, I could replace all of these strings, even though they all have different values within them? It is listed like 600 times in the file, which is why I do not want to manually go through each search result and delete the string. Any help appretiated. ty - team_caffeine
-
Hello, @team-caffeine,
This kind of manipulation is very easily performed, with regular expressions. So :
-
Open your XML file in N++
-
Move back to its very beginning, if necessary (
Ctrl + Origin) -
Open the Replace dialog (
Ctrl + H) -
Type, in Find what: zone, the regex
(?-i)<entityGroup="spiderZombie" prob="\d+"/> -
Let the Replace with: zone
EMPTY -
Select the Regular expression search mode
-
Click on the Replace All button
Et voilà !
Assuming, for instance, the 7 lines original text, below :
blablablah <entityGroup="spiderZombie" prob="000"/> Other text blablablah <entityGroup="spiderZombie" prob="123"/> Other text blablablah <entityGroup="superHero" prob="999"/> Other text blablablah <entityGroup="spiderZombie" prob="456"/> Other text blablablah <entityGroup="total_Destroyer" prob="10"/> Other text blablablah <entityGroup="spiderZombie" prob="789"/> Other text blablablah <entityGroup="spiderZombie" prob="4589"/> Other textWe would obtain, after global replacement :
blablablah Other text blablablah Other text blablablah <entityGroup="superHero" prob="999"/> Other text blablablah Other text blablablah <entityGroup="total_Destroyer" prob="10"/> Other text blablablah Other text blablablah Other text
Notes :
-
I supposed that search must be sensitive to case. If not, change the modifier
(?-i)by(?i) -
I supposed that the prob number is any integer. If it has to be restricted to three digits, only, change the part
\d+by\d{3} -
On the contrary, if any string entityGroup is concerned by the suppression, use the regex, below :
(?-i)<entityGroup="\w+" prob="\d+"/>With this regex, any entityGroup name, containing word characters ( letters, digits, or the low line character
_) would be matched and suppressed, in replacement, along with the prob string. So, it would give the resulting text :blablablah Other text blablablah Other text blablablah Other text blablablah Other text blablablah Other text blablablah Other text blablablah Other textBest Regards,
guy038
-
-
Thank you! Im sure this will work, but I am very inexperienced in coding so I still need a little help. The integer is always in the format “0.000”. I tried searching for what you suggested but it did not find anything, however, I don’t know how to change it to where it would find them in this format. All of the values start with 0, and then have three digits after a decimal. So the 3 numbers after the decimal are the only changing factors.
-
The last part of Guy’s expression:
\d+means 1 or more digits. If you want a digit, a period, and exactly 3 digits, one way is to use this:
\d\.\d{3}The first \d is for a single digit. The \. is for a period (the period means any character whatsoever unless it has a \ in front of it). The final \d{3} means exactly 3 digits.
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login