Home > Software design >  Editing List in Python using Regex doesn't work
Editing List in Python using Regex doesn't work

Time:08-28

i'm currently trying to edit a list that i created, it looks like this:

['\n//POINTER #1 @ $3BA4 - STRING #1 @ $3DD3\n#W32($3BA4)\n・All enemies defeated[END-FE]', '\n//POINTER #2 @ $3BA8 - STRING #2 @ $3DEC\n#W32($3BA8)\n・Follower dies[NLINE]\n・All party members die[END-FE]', '\n//POINTER #3 @ $3BAC - STRING #3 @ $3E17\n#W32($3BAC)\n・Follower dies[NLINE]\n・All party members die[END-FE]', '\n//POINTER #4 @ $3BB0 - STRING #4 @ $3E42\n#W32($3BB0)\n・All party members die[END-FE]']

Now i want to "find and replace" strings that look like this in each list item:

//POINTER #X @ $XXXX - STRING #X @ $XXXX\n

I tried the following code, and according to regex101 it should find all regex items, but its not replacing them:

import re
engfile_chunks = [<list above>]
engfile_chunks_new = [re.sub(r'(\\n//POINTER). ?(?=\\n)', '', chunks) for chunks in engfile_chunks]

Anybody got a clue why its not working?

CodePudding user response:

You are matching the literal string \n (a backslash and then n), not a newline character. In your case, you don't actually need a raw string for your regex, so you can make it a regular string and use one backslash. Then, Python will insert a newline character and it will work:

import re
engfile_chunks = [
    "\n//POINTER #1 @ $3BA4 - STRING #1 @ $3DD3\n#W32($3BA4)\n・All enemies defeated[END-FE]",
    "\n//POINTER #2 @ $3BA8 - STRING #2 @ $3DEC\n#W32($3BA8)\n・Follower dies[NLINE]\n・All party members die[END-FE]",
    "\n//POINTER #3 @ $3BAC - STRING #3 @ $3E17\n#W32($3BAC)\n・Follower dies[NLINE]\n・All party members die[END-FE]",
    "\n//POINTER #4 @ $3BB0 - STRING #4 @ $3E42\n#W32($3BB0)\n・All party members die[END-FE]",
]
engfile_chunks_new = [re.sub("(\n//POINTER). ?(?=\n)", "", chunks) for chunks in engfile_chunks]
  • Related