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 ******************
prev 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).