unofficial mirror of help-gnu-emacs@gnu.org
 help / color / mirror / Atom feed
From: Pascal Bourguignon <spam@thalassa.informatimago.com>
Subject: Re: capitalize string using regular expressions
Date: 06 Dec 2003 05:29:17 +0100	[thread overview]
Message-ID: <87ptf2a7s2.fsf@thalassa.informatimago.com> (raw)
In-Reply-To: 3M9Ab.324$vg4.207@nwrdny02.gnilink.net

"colin smith" <zxcv4856@hotmail.com> writes:

> Hi Everyone,
> 
>     Does anyone know how I can replace all occurences of  any strings that
> end with ".txt" (lets say "ghjkl.txt" and "xyz.txt") with their uppercase
> equivalents(ie. "GHJKL.txt" and "XYZ.txt").  There must be some way of doing
> this using regular expressions. I've looked extensively through the emacs
> help, but havent been able to figure it out.

Your problem  is slightly ill-defined.   What are those  "any strings"
you're speaking about?  Imagine a buffer containing:

toto.txt titi.txt tutu.txt
tata.txt

Do you want:

TOTO.TXT TITI.TXT TUTU.txt
TATA.txt

or do you want:

TOTO.txt TITI.txt TUTU.txt
TATA.txt

What about:

txt.txt.txt.txt
tu\
tu.txt

?

(goto-char (point-min))
(let ((case-fold-search nil))
    (while (re-search-forward "\\(.+\\)\\(\\.txt\\)" nil t)
        (let ((before (match-string 1)))
          (delete-region (match-beginning 1) (match-end 1))
          (goto-char (match-beginning 1))
          (insert before))))

You can run it on a given buffer with: M-x eval-expression RET
and pasting the expression and RET, or you can make a command:

(defun upcase-before-.txt (start end)
  (interactive "r")
  (goto-char start)
  (let ((case-fold-search nil))
    (while (re-search-forward "\\(.+\\)\\(\\.txt\\)" end t)
      ;; note implicit         ^ beginning and     ^ end of anything 
      ;; on the same line! ("." does match anything but a new line).
      ;; Was it what you meant?
      (let ((before (upcase (match-string 1))))
        (delete-region (match-beginning 1) (match-end 1))
        (goto-char (match-beginning 1))
        (insert before)))))

and select a region and M-x upcase-before-.txt RET




If you mean individual strings, what do you mean by "all occurrences"?

(show
(mapcar (lambda (any-string)
          (let ((case-fold-search nil))
             (if (string-match "^\\(.*\\)\\.txt$" any-string)
              ;; note explicit  ^ begin and    $ end of string !
                 (concat (upcase (match-string 1 any-string)) ".txt")
                 any-string)))
        '("toto.txt" "titi" "tata.txt" "tutu.TXT"
          "txt.txt.txt" "toto.txt tutu.txt"))
)
==> ("TOTO.txt" "titi" "TATA.txt" "tutu.TXT" "TXT.TXT.txt" "TOTO.TXT TUTU.txt")


-- 
__Pascal_Bourguignon__                              .  *   * . * .* .
http://www.informatimago.com/                        .   *   .   .*
                                                    * .  . /\ ( .  . *
Living free in Alaska or in Siberia, a               . .  / .\   . * .
grizzli's life expectancy is 35 years,              .*.  / *  \  . .
but no more than 8 years in captivity.                . /*   o \     .
http://www.theadvocates.org/                        *   '''||'''   .
SCO Spam-magnet: postmaster@sco.com                 ******************

      parent reply	other threads:[~2003-12-06  4:29 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-12-06  0:53 capitalize string using regular expressions colin smith
2003-12-06  2:19 ` Tim Heaney
2003-12-06  3:29 ` Greg Hill
2003-12-06  4:29 ` Pascal Bourguignon [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87ptf2a7s2.fsf@thalassa.informatimago.com \
    --to=spam@thalassa.informatimago.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).