Groups | Blog | Home
all groups > dotnet framework > april 2008 >

dotnet framework : Regex Replace Help


barry
4/29/2008 7:56:28 PM
Hi

I have a files which contains
&
&
&quote;

I want to replace & with & , but not & or &quote;

Will someone please help with the Regular Expression.

TIA
Barry


eBob.com
4/30/2008 10:22:02 AM
Hi Barry,

Actually I wanted to play around with this for you but just haven't gotten
around to it. (And, btw, I don't recall any previous posts from you on this
subject.)

Part of my response to you, the part I can provide without actually playing
with a regex, is the following. Regular Expressions are extremely useful.
If you do any programming the effort you put into learning regular
expressions will be worth it. Several of us here use Expresso (from
UltraPico) and recommend it. I just became aware of something similar
called Regular Expression Workbench available from MSDN. I've installed it
but have not yet played with it.

I'll try to play with it later today but no promises.

Bob

[quoted text, click to view]

barry
4/30/2008 6:22:05 PM
strange, no one has replied

looks like i have crossed the limit of asking question on the same topic. I
the some limit maybe (10 or 15 per topic)


[quoted text, click to view]

barry
4/30/2008 8:15:35 PM

Thanks for your reply

Imagine the following string
string str = "The Quick Black&Fox & Jumped Over &quote; The & Lazy Dog";

should be

string str = "The Quick Black&Fox & Jumped Over &quote; The & Lazy
Dog";

This is a problem with a larger .xml file in which xx&xx is creating a
problems in IE

In fact in have just spent over 50 minutes and managed to get some results
like this

str = Regex.Replace(str, @"\b\s*(?=&[^&|&quote;| & ])\b", "&",
RegexOptions.None);

And last but not the least i collect all answers posted to my Regex queries
for later use.








[quoted text, click to view]

eBob.com
5/1/2008 12:19:04 AM
Well ... I did know before I looked at this that I was far from an expert in
regular expressions. But I know that even better now! But I think that I
did eventually find a solution.

I began by ignoring the replace aspect of the problem and tried to just find
a regular expression that would find the right ampersands. At first I did
not see how to find an "&" NOT followed by a specific STRING. But after
some research in the great Balena book I learned that I could use what is
called a "zero-width negative look-ahead assertion". The syntax for one of
those is "(?!subexpr)". So using this expression
(?<desiredamp>&(?!amp;))
I was able to find ampersands except for those followed by "amp;". Great!
I thought I was on my way and leapt, without sufficient thought, to
(?<desiredamp>&((?!amp;)|(?!quote;)))
but that catches all ampersands. It catches &amp; because that's an & not
followed by "quote;". And catches &quote; because that's an & not followed
by "amp;".

After more thought I came up with
(?<desiredamp>&(?!(amp;)|(quote;)))
which I think finds the ampersands which you want to find.

Another plug for Expresso, it was absolutely invaluable in researching this!

The expression above does find the & in "The & Lazy Dog". But if you don't
want that one I am sure you can see how to alter the expression to eliminate
it. I also did not worry about the replace aspect of the problem, I'm sure
you don't need help with that.

Good Luck, Bob

[quoted text, click to view]

Tigger
5/2/2008 1:11:23 AM
[quoted text, click to view]

Is this a case of correcting badly encoded data? Is the source data expected
to be correctly encoded html/xml?

It seems encoding certain "&"s while igonoring others is hacking around a
problem instead of sorting out why the source data is incorrect.

Also, in your example you encode one "&" at "Black&Fox" while ignoring
another at "The & Lazy". So what are the rules?

--
Tigger
http://www.mccreath.org.uk

Jesse Houwing
5/2/2008 9:01:22 AM
Hello Barry,

Let's try to wriete out the pattern you're looking for.

You're specifically looking for a pattern that consists of an &, not followed
by any alphanumeric characters and a ;. Now if you write it out like that,
it becomes quite simple:

&(?![a-z0-9]+;)

That's it... Now, replace those with &amp; and you're done.

Jesse


[quoted text, click to view]
--
Jesse Houwing
jesse.houwing at sogeti.n

Jesse Houwing
5/2/2008 11:20:46 AM
Hello Barry,

[quoted text, click to view]

You're welcome :)

Jesse


[quoted text, click to view]
--
Jesse Houwing
jesse.houwing at sogeti.nl

barry
5/2/2008 2:45:39 PM

well i work on freelancer sites and one buyer had posted 3 xml files which
hr/she could not read in IE, i tried them myself it would fail on some lines
with IE giving the following error message

A semi colon character was expected. Error processing resource
'file:///C:/3Xmls/canales.es_9159529468.xml'. Line 16590, P...

once the & was replacedwith &amp; it would move further and show a error on
another line.

The buyer wanted the errors corrected in the entire files, it was possible
to do a find/replace (carefully) in a text editor, i have no intention of
hacking and do not have the time to do so.

If you want i can send you one of those files (i do not have the permission
to do so, but that does not matter).
following is one such problem node, link is the problem node

<video>
<idvideo>Publicidad</idvideo>
<nombre>Publicidad</nombre>
<descripcion>Publicidad</descripcion>
[quoted text, click to view]
barry
5/2/2008 3:36:22 PM
Hello Jesse

Will this work on a entire XML file (it has over 20,000 lines) and there are
many lines with such problems. The acutal job is long over, i am only trying
to understand regex in such cases.

Barry


[quoted text, click to view]

barry
5/2/2008 4:36:55 PM
Thanks Jesse

It does the replace in the entire xml file.

Barry


[quoted text, click to view]

AddThis Social Bookmark Button