in reply to Re^4: How to enforce match priority irrespective of string position
in thread How to enforce match priority irrespective of string position

I was hoping there would be some way of doing this. ... Sigh. Too bad regex can't do everything!

Be aware of the "if all you have is a hammer, everything looks like a nail" effect. Doing everything in a single regex is nice, but shouldn't be a requirement - sometimes, things can be expressed much more cleanly with a few regexes and some code. And be aware of premature optimization as well - sure, oftentimes a single regex is faster than multiple, but usually it's better to get things working first instead of trying to bend over backwards and trying to wrap your head around a complex regex. Especially in the case you describe, IMHO the brainpower is much better spent on writing up test cases first!

use warnings; use strict; use Test::More; sub my_sentence_splitter { my $input = shift; my @output; # ... magic ... return \@output; } is_deeply my_sentence_splitter(<<END), I'm looking for the end of a sentence, where possible. However, in so +me cases, I'll need to go with a non-conventional "end" to it, such a +s: "Here's a quote by a famous person which is supposed to exceed for +ty words and is therefore required to be set apart as a separate, ind +ented paragraph per APA style." (Famous, 1999) Note that the regex ne +eds to look for the full end of the sentence, if it exists: it cannot + simply stop at the colon unless there is no further part to the sent +ence provided in that paragraph. END [ q#I'm looking for the end of a sentence, where possible.#, q#However, in some cases, I'll need to go with a non-conventional +"end" to it, such as:#, q#"Here's a quote by a famous person which is supposed to exceed f +orty words and is therefore required to be set apart as a separate, i +ndented paragraph per APA style."#, q#(Famous, 1999)#, q#Note that the regex needs to look for the full end of the senten +ce, if it exists: it cannot simply stop at the colon unless there is +no further part to the sentence provided in that paragraph.#, ]; # TODO: Many more test cases here! done_testing;
  • Comment on Re^5: How to enforce match priority irrespective of string position
  • Download Code

Replies are listed 'Best First'.
Re^6: How to enforce match priority irrespective of string position
by Polyglot (Chaplain) on Mar 07, 2021 at 14:31 UTC

    I do appreciate all of your suggestions. In my case, speed is no issue. It's a one-off script that, once the job is done, will not be needed again. If it took all night or even three days to process, I wouldn't mind...so long as it was correctly completed (it should finish in just a few minutes, though). Furthermore, it's not running on English...which is one reason I gave a hypothetical example here. It's running on an Asian language, full of HTML-entity-style character codes which I'm converting to UTF8, among other things.

    Yes, I'm a polyglot. :)

    Blessings,

    ~Polyglot~