Regular Expression Span Class

Status
Niet open voor verdere reacties.

ChrisjuhB

Gebruiker
Lid geworden
8 jan 2012
Berichten
17
Hallo ik probleem wat waarde te selecteren met een regex code in C#.
Ik ben nieuw met Regular Expressions en kom er dus niet uit hoe ik de waarde 399,00 uit deze code haal: <span class="price" id="product-price-831"> €*399,00 </span>
Ik heb al verschillende dingen geprobleerd zoals <*/?\s*span.*?> maar daar werkt het niet mee. Er zijn meerdere span classes in de totale text. en moet alleen de waarde van de span class price met het id product-price-831 hebben.


Alvast bedankt!

Met vriendelijke groeten,
Christian
 
Via Javascript is het deze expressie:
[js]
\<span(.+)id="product-price-831"\>(.+)\<\/span\>
[/js]
In deze fiddle zie je het resultaat: http://jsfiddle.net/bPv3d/

Omdat reguliere expressies in verschillende talen vaak hetzelfde werken vermoed ik dat deze ook voor C# zal werken :)
 
Dan heb ik nu: "<span(.+)id=\"product-price-831\"\\>(.+)\\<\\/span\\>"

Om het werkend te maken maar dan kan hij niks vinden.

Totale code:
string priceRegexScript = "<span(.+)id=\"product-price-831\"\\>(.+)\\<\\/span\\>";

Match priceText = Regex.Match(strPureText, priceRegexScript);
strPureText = priceText.Groups[1].Value;
txtPage.Text = string.Empty;
txtPage.Text = strPureText;

strPureText = de lap HTML code.
 
Laatst bewerkt:
Kwestie van escapen lijkt mij :)
[js]
\<span(.+)id=\"product-price-831\"\>(.+)\<\/span\>
[/js]

Daarnaast is het handig om te vertellen welke errors er gegeven worden :)
 
Hij geeft 'Unrecognized escape sequence' bij alle \< .

Misschien kan je bij javascript geen < in een string zetten maar bij c# is het geen probleem.
Daar in tegen kan je bij c# geen " in een string zetten. Dus logisch alle \ bij de < weg. en \ bij de ".

Krijg je dit: string priceRegexScript = "<span(.+)id=\"product-price-831\">(.+)</span>";

Geen errors maar vind niks.


EDIT: en wat houdt (.+) in?

EDIT: Ik ben in de buurt heb nu de waarde € 399, 00 op me scherm alleen heel veel spaties erbij. Deze krijg ik wel weg. Heb het zo gedaan:

string priceRegexScript = @"(?<=<span class=""price"" id=""product-price-831"">)([^<]+)(?=</span>)";
 
Laatst bewerkt door een moderator:
Dus logisch alle \ bij de < weg. en \ bij de ".
Zo logisch lijkt mij dit niet, de "\" geeft aan dat het teken er na letterlijk genomen moet worden.

Wellicht is deze link handig voor je: http://www.mikesdotnetting.com/Article/46/CSharp-Regular-Expressions-Cheat-Sheet

Op deze engelse pagina zie ik echter dat je een expressie zo maakt:
Code:
Regex objNaturalPattern=new Regex("0*[1-9][0-9]*");
en op deze engels pagina staat dat een verhaaltje over de backslash
In literal C# strings, as well as in C++ and many other .NET languages, the backslash is an escape character. The literal string "\\" is a single backslash. In regular expressions, the backslash is also an escape character. The regular expression \\ matches a single backslash. This regular expression as a C# string, becomes "\\\\". That's right: 4 backslashes to match a single one
Dus zou dat in dit geval zo worden:
Code:
new Regex("\\<span(.+)id=\\"product-price-831\\"\\>(.+)\\<\\/span\\>");
Ik begrijp de omschrijving op regular-expressions.info niet helemaal, dus het kan best zijn dat je 4 backslashes dient te gebruiken.

Daarnaast is het niet nodig (en gewenst) om bij een reactie op een bovenstaand bericht, het bericht te quoten. Hier wordt de pagina onnodig lang door :)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan