2016-04-14 21 views
0

Dönmekte olduğum regex kalıplarımın bir listesi var ve başarılı olursa bir işlem yapıyor. İşte ne var şimdi var:Regex'in adlandırılmış kalıptaki sözcükleri atlaması gerekiyor C#

string csvText = 
    "A Minimum Usage Fee of ten dollars and ninety-nine cents ($10.99) for each Customer ESI ID with electricity consumption less than 1,000 kWh per billing cycle."; 

string csvPattern = 
    @"A Minimum Usage Fee of (\p{Sc}*(?<cost>\s?\d+[., ]?\d*)) for each Customer ESI ID with electricity consumption (?<comparator>[a-zA-Z0-9\s]+) (?<usage>[0-9, ]+) kWh per billing cycle."; 

Regex regex = new Regex(csvPattern); 
var match = regex.Match(csvText); 

Ancak, ben değişecektir bir dize ("on dolar doksan dokuz sent"), sonra istediğiniz değeri ("10.99") var. Bu kelimeleri atlamak için adlandırılmış bir regex dizesini nasıl anlarım? Maliyet grubuna bir bakış ekleyerek denedim (başarısızlıkla), ancak eşleşmiyor.

+0

ile gitmeli? – timothyclifford

+0

Bu maliyet formatı her zaman $ somedigits.somedigits' midir? –

+0

Hayır. Ama üretimin istediği şey bu. @timothyclifford – Kat

cevap

1

Maliyet biçimi tutarlıysa, (\p{Sc}*(?<cost>\s?\d+[., ]?\d*))'a ihtiyacınız yoktur.

Bu sorunun en iyi çözümü regex mı (?<cost>\$\d+(?:\.\d+)?)

string csvText = "A Minimum Usage Fee of ten dollars and ninety-nine cents ($10.99) for each Customer ESI ID with electricity consumption less than 1,000 kWh per billing cycle."; 
     string csvPattern = 
      @"A Minimum Usage Fee of [A-Za-z -]+ \((?<cost>\$\d+(?:\.\d+)?)\) for each Customer ESI ID with electricity consumption (?<comparator>[a-zA-Z0-9\s]+) (?<usage>[0-9, ]+) kWh per billing cycle\."; 

    Regex regex = new Regex(csvPattern); 
    var match = regex.Match(csvText); 

Regex101 Demo

+1

Teşekkür ederim, arkadaşım. Bugün rastgele 5 dolar bulabilir misin? – Kat

+1

@sparkysword: Size Paypal Kimliğimi vereyim mi? ☺☻ –

İlgili konular