http://www.perlmonks.org?node_id=938677


in reply to Re^3: Converting a Text file to XML
in thread Converting a Text file to XML

Thanks for your clarification. I did understand Grandfather's code, I think I just used the wrong terminology in my question -- as you said, what I wanted was the proper regex to search for that four-digit year. Your additions (as well as your modification of the $bibData field) did that beautifully.

I do expect to come upon a number of rough spots, especially as I'm expecting to edit all of my research notes in a file that is equally human- and machine-readable. Quite a dream, isn't it?

One immediate problem I see with this is that the script only recognizes bibliographic data between quotation marks. So, a journal article between quotes will get picked up while a book title, which conventionally doesn't have quotes, will not. This effectively excludes about a third of my data from the xml output.

I think I might go back and edit the raw text file so that the bibliographic info on each line is between | characters.

My question is, what regex could I use to replace ^([^"]* "[^"]+".*?) so that $bibData identifies all text between | characters?

Thanks again. I'll be sure to show everyone the final product once I'm finished.

Replies are listed 'Best First'.
Re^5: Converting a Text file to XML
by graff (Chancellor) on Nov 18, 2011 at 03:07 UTC
    If you're going to manually insert field delimiters, then you could just switch to using split:
    my ( $title, $date, $this, $that ) = split /\|/;
    But it's likely that the data will mostly fall into a few dominant format groups, with some long tail of "outliers". You could either apply a list of regex matches (if the first one doesn't work, try the next one, and so on), or you could try some simple diagnostics to divide the data into subsets according to the absense/presence/type of difficulty: if there's more than one 4-digit string, that's one problem; if there are no double quotes (or an odd number of quotes), that's another problem, ... This will reduce the number of cases that need to be fixed by hand in order to be parsable.