Loading ...
Sorry, an error occurred while loading the content.

Re: Regexp help

Expand Messages
  • Erik Christiansen
    ... Everything s better with v ;-) ... On the test line: 123 123.0 123. 456 0.123 .123 789 that regex also detects the fractional parts as integers, so it
    Message 1 of 15 , Jul 30, 2013
    • 0 Attachment
      On 30.07.13 06:57, Ben Fritz wrote:
      > Maybe better using "very magic":

      Everything's better with \v ;-)

      > \v<\d+>\.@!

      On the test line:

      123 123.0 123. 456 0.123 .123 789

      that regex also detects the fractional parts as integers, so it still
      needs a tweak. This seems to do it:

      /\v\.@<!<\d+>\.@!

      But even that finds 06 and 57 in 06:57. Whether they are desired
      integers may vary between use cases. Admittedly they'll probably only
      crop up in rare strings in a fortran program.

      Erik

      --
      Mollison's Bureaucracy Hypothesis:
      If an idea can survive a bureaucratic review and be implemented
      it wasn't worth doing.

      --
      --
      You received this message from the "vim_use" maillist.
      Do not top-post! Type your reply below the text you are replying to.
      For more information, visit http://www.vim.org/maillist.php

      ---
      You received this message because you are subscribed to the Google Groups "vim_use" group.
      To unsubscribe from this group and stop receiving emails from it, send an email to vim_use+unsubscribe@....
      For more options, visit https://groups.google.com/groups/opt_out.
    • Ben Fritz
      ... Yes. I occasionally edit portions of my .vimrc where I didn t used it, and wonder why. ... The OP specifically said that valid decimals are in the form
      Message 2 of 15 , Jul 30, 2013
      • 0 Attachment
        On Tuesday, July 30, 2013 9:27:51 AM UTC-5, Erik Christiansen wrote:
        > On 30.07.13 06:57, Ben Fritz wrote:
        >
        > > Maybe better using "very magic":
        >
        >
        >
        > Everything's better with \v ;-)
        >
        >

        Yes. I occasionally edit portions of my .vimrc where I didn't used it, and wonder why.

        >
        > > \v<\d+>\.@!
        >
        >
        >
        > On the test line:
        >
        >
        >
        > 123 123.0 123. 456 0.123 .123 789
        >
        >

        The OP specifically said that valid decimals are "in the form 1.0D0, or more precisely \d\+\.\d\+D\d\+" so I didn't try stuff like "123." or ".123".

        But possibly as in the other thread we need to account for negative numbers?

        >
        > that regex also detects the fractional parts as integers, so it still
        >
        > needs a tweak. This seems to do it:
        >
        >
        >
        > /\v\.@<!<\d+>\.@!
        >
        >

        Good. Even without the narrow constraints I assumed it's fairly easy to tweak to get it more correct.

        For the OP, Erik added a negative look-behind (similar to the look-ahead my first response used but constraining what comes BEFORE instead). See :help /\@<!

        >
        > But even that finds 06 and 57 in 06:57. Whether they are desired
        >
        > integers may vary between use cases. Admittedly they'll probably only
        >
        > crop up in rare strings in a fortran program.
        >

        Good point...but these would be harder to guard against.

        --
        --
        You received this message from the "vim_use" maillist.
        Do not top-post! Type your reply below the text you are replying to.
        For more information, visit http://www.vim.org/maillist.php

        ---
        You received this message because you are subscribed to the Google Groups "vim_use" group.
        To unsubscribe from this group and stop receiving emails from it, send an email to vim_use+unsubscribe@....
        For more options, visit https://groups.google.com/groups/opt_out.
      • Erik Christiansen
        ... Wot ... just trust the problem specification? OK, the OP might be a mathematician or engineer, since fortran is mentioned, so you re probably right. But in
        Message 3 of 15 , Jul 30, 2013
        • 0 Attachment
          On 30.07.13 07:41, Ben Fritz wrote:
          > The OP specifically said that valid decimals are "in the form 1.0D0,
          > or more precisely \d\+\.\d\+D\d\+" so I didn't try stuff like "123."
          > or ".123".

          Wot ... just trust the problem specification? OK, the OP might be a
          mathematician or engineer, since fortran is mentioned, so you're
          probably right. But in years gone by, I sometimes wrote regexes for
          others in a technical department, and the original problem spec almost
          always had to be tightened, to exclude stuff which hadn't been thought of.

          > But possibly as in the other thread we need to account for negative numbers?

          If we change the test text to:

          123 123.0 123. -456 0.123 .123 789

          then what we had:

          > > /\v\.@<!<\d+>\.@!

          also finds -456, but the cursor is on the 4, not the minus sign.
          If signed integers are also needed, we'd probably have to ditch the
          precondition, since /\v(-?|\.@<!)<\d+>\.@! introduces an ambiguity which
          defeats that alternative. (It's rotten regex construction.)

          This, though, finds "-456", rather than "456":

          \v(^|[ \t+-])<\d+>\.@!

          but again finds "123" " 789", as before. Maybe that's OK?

          Erik

          --
          Remembering is for those who have forgotten.
          - Chinese proverb

          --
          --
          You received this message from the "vim_use" maillist.
          Do not top-post! Type your reply below the text you are replying to.
          For more information, visit http://www.vim.org/maillist.php

          ---
          You received this message because you are subscribed to the Google Groups "vim_use" group.
          To unsubscribe from this group and stop receiving emails from it, send an email to vim_use+unsubscribe@....
          For more options, visit https://groups.google.com/groups/opt_out.
        • Nikolay Pavlov
          On Jul 30, 2013 7:26 PM, Erik Christiansen ... numbers? ... If you are speaking about numbers in programming language you should
          Message 4 of 15 , Jul 30, 2013
          • 0 Attachment


            On Jul 30, 2013 7:26 PM, "Erik Christiansen" <dvalin@...> wrote:
            >
            > On 30.07.13 07:41, Ben Fritz wrote:
            > > The OP specifically said that valid decimals are "in the form 1.0D0,
            > > or more precisely \d\+\.\d\+D\d\+" so I didn't try stuff like "123."
            > > or ".123".
            >
            > Wot ... just trust the problem specification? OK, the OP might be a
            > mathematician or engineer, since fortran is mentioned, so you're
            > probably right. But in years gone by, I sometimes wrote regexes for
            > others in a technical department, and the original problem spec almost
            > always had to be tightened, to exclude stuff which hadn't been thought of.
            >
            > > But possibly as in the other thread we need to account for negative numbers?
            >
            > If we change the test text to:
            >
            > 123 123.0 123. -456 0.123 .123 789
            >
            > then what we had:
            >
            > > > /\v\.@<!<\d+>\.@!
            >
            > also finds -456, but the cursor is on the 4, not the minus sign.
            > If signed integers are also needed, we'd probably have to ditch the
            > precondition, since /\v(-?|\.@<!)<\d+>\.@! introduces an ambiguity which
            > defeats that alternative. (It's rotten regex construction.)
            >
            > This, though, finds "-456", rather than "456":
            >
            > \v(^|[ \t+-])<\d+>\.@!
            >
            > but again finds "123" " 789", as before. Maybe that's OK?

            If you are speaking about numbers in programming language you should take care about expressions: there is no number -456 in expression 123-456. Also note that in programming languages negative numbers may exist only as optimization for minus being an unary operator in an expression -456 (it does not make any difference whether you treat -456 as unary minus applied to positive 456 or as a negative number; but the latter is faster). So I would not widen the request this way.

            \v[[:alnum:].]@<!\d+[[:alnum:].]@!

            should be fine.

            > Erik
            >
            > --
            > Remembering is for those who have forgotten.
            >                             - Chinese proverb
            >
            > --
            > --
            > You received this message from the "vim_use" maillist.
            > Do not top-post! Type your reply below the text you are replying to.
            > For more information, visit http://www.vim.org/maillist.php
            >
            > ---
            > You received this message because you are subscribed to the Google Groups "vim_use" group.
            > To unsubscribe from this group and stop receiving emails from it, send an email to vim_use+unsubscribe@....
            > For more options, visit https://groups.google.com/groups/opt_out.
            >
            >

            --
            --
            You received this message from the "vim_use" maillist.
            Do not top-post! Type your reply below the text you are replying to.
            For more information, visit http://www.vim.org/maillist.php
             
            ---
            You received this message because you are subscribed to the Google Groups "vim_use" group.
            To unsubscribe from this group and stop receiving emails from it, send an email to vim_use+unsubscribe@....
            For more options, visit https://groups.google.com/groups/opt_out.
             
             
          Your message has been successfully submitted and would be delivered to recipients shortly.