You are a grandmaster JJ Merci! On Thursday, August 26, 2021 at 12:20:03 AM UTC+3 jj wrote:
> Find: > > > <ANIMAL[^>]+?(?:NAME="([^"]+)"[^>]+LIKES="([^"]+)"|LIKES="([^"]+)"[^>]+NAME="([^"]+)"|(?:NAME|LIKES)="([^"]+)")[^>]*> > > Replace: > > \1 \2 \4 \3 \5 > > Test data : > > <ANIMAL NAME="Fluffy" SPECIES="dog" LIKES="bones" AGE="6"> > <ANIMAL LIKES="Banana" NAME="Abu" SPECIES="Monkey" AGE="6"> > <ANIMAL NAME="Fluffy" SPECIES="dog" LIKES="" AGE="6"> > <ANIMAL LIKES="Banana" NAME="" SPECIES="Monkey" AGE="6"> > <ANIMAL AGE="6" NAME="Peter" SPECIES="Rabbit" > > <ANIMAL SPECIES="Rabbit" AGE="6" LIKES="Carrots"> > > Extract: > > Fluffy bones > Abu Banana > Fluffy > Banana > Peter > Carrots > > In case you will want to remove the leading spaces. > > Find: > > ^\s+ > > Replace: > > <empty> > > If it gets more complicated than that maybe you should go for more > advanced XML parsing tools. > Regular expressions are not the best fit for those cases. > > HTH > > Jean Jourdain > > On Wednesday, August 25, 2021 at 9:48:50 PM UTC+2 BBLuv wrote: > >> Appreciated Jean! It works as if miraculous. If you would accept a >> further challenge: how can the expression also find instances when only one >> of the attributes is present? bonus challenge: and if the attributes are >> not in that order? >> Great big thanks >> >> On Wednesday, August 25, 2021 at 4:53:49 PM UTC+3 jj wrote: >> >>> >>> Hi BBLuv, >>> >>> Find: >>> >>> <ANIMAL[^>]+NAME="([^"]*)"[^>]+LIKES="([^"]*)"[^>]*> >>> >>> Replace: >>> >>> \1 -- \2 >>> >>> and use the Extract button of the find window. >>> >>> HTH >>> >>> Jean Jourdain >>> >>> On Wednesday, August 25, 2021 at 2:12:48 PM UTC+2 BBLuv wrote: >>> >>>> Hi - non technical user here, proud to have figured out part of my goal. >>>> >>>> I have multiple XML files that I am trying to scan through to pluck out >>>> instances of tag attributes. The XML looks like this, and I want to >>>> extract >>>> the NAME and LIKES attributes across the files. >>>> >>>> <ANIMAL NAME="Fluffy" SPECIES="dog" LIKES="bones" AGE="6"> >>>> >>>> Using grep + extract I am able to produce this: >>>> >>>> search = (?<=NAME=").*?(?=")|(?<=LIKES=").*?(?=") >>>> output = >>>> Fluffy >>>> bones >>>> Tiger >>>> chewtoys >>>> Rusty >>>> mailmen >>>> >>>> I would love output that includes my own text: >>>> Fluffy -- bones >>>> Tiger -- chewtoys >>>> Rusty -- mailmen >>>> >>>> or at least has the output values in one line per XML tag >>>> Fluffy bones >>>> Tiger chewtoys >>>> Rusty mailmen >>>> >>>> I learned the pipe character lets me make multiple extractions but I am >>>> not able to control the output. >>>> >>>> Can you help? >>>> >>>> Thanking you... >>>> >>>> >>>> >>>> -- This is the BBEdit Talk public discussion group. If you have a feature request or need technical support, please email "[email protected]" rather than posting here. Follow @bbedit on Twitter: <https://twitter.com/bbedit> --- You received this message because you are subscribed to the Google Groups "BBEdit Talk" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/bbedit/6ff33dc0-cc26-4cd7-8105-6bf0513de6fdn%40googlegroups.com.
