Regex desenin de hata c#

Katılım
17 Haziran 2008
Mesajlar
1,840
Excel Vers. ve Dili
Microsoft Ofis Profesyonel 2019 x64 TR
Altın Üyelik Bitiş Tarihi
26-03-2020
Merhaba arkadaşlar;

Bu şekilde bir desen oluşturdum
=?\s?(\d+\.?\d+)|K\d*\s\/\s|BETON MİKTARI: \d*\.?\d*\s\bx\s\d*\.?\d*\s

sonuçları alıyorum. Fakat sadece alt kısımdaki tek haneli 8 sayısını almıyor... nerede hata yapıyorum?

BETON MİKTARI: 18.70 x 0.12 = 2.24
BETON MİKTARI: 40.74 x 0.12 = 4.89
BETON MİKTARI: 55.56 x 0.16 = 8.89
BETON MİKTARI: 2.38 x 0.16 = 0.38
BETON MİKTARI: 26.25 x 0.16 = 4.20
Toplam =215
Toplam = 215
Toplam : 15.69

4.20
5.20
10
125.36
85


SD125.36SD
asc136dssd89

K129 / 31 Adet
K128 / 35 Adet
K127 / 41 Adet
K101 / 8 Adet --- Hatalı kısım 8 dahil etmiyor...
 

Haluk

𐱅𐰇𐰼𐰚
Katılım
7 Temmuz 2004
Mesajlar
12,302
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Daha basit bir desenle alternatif (VBA);

(String ifadenin içindeki en son integer veya double değeri yakalar.)

C++:
Function getData(myRng As Range)
    Dim regExp As Object, xMatch As Variant, i As Integer

    If regExp Is Nothing Then
        Set regExp = CreateObject("VBScript.RegExp")
        regExp.Pattern = "([\d+,.]+)"
        regExp.Global = True
        regExp.IgnoreCase = True
    End If

    If regExp.Test(myRng) Then
        For Each xMatch In regExp.Execute(myRng)
            i = i + 1
        Next
        getData = regExp.Execute(myRng)(i - 1).SubMatches(0)
    Else
        getData = ""
    End If
End Function



.
 
Son düzenleme:
Katılım
17 Haziran 2008
Mesajlar
1,840
Excel Vers. ve Dili
Microsoft Ofis Profesyonel 2019 x64 TR
Altın Üyelik Bitiş Tarihi
26-03-2020
@Haluk

C#:
  regExp.Pattern = "([\d+,.]+)"
Hocam kod için teşekkürler. Evet desen daha sade oldu. ama C# da ben istediğim sonuçları alamıyorum... VBA doğru sonuç veriyor olabilir,, C# olmadı hocam. yada ben kodlayamadım.
 

Haluk

𐱅𐰇𐰼𐰚
Katılım
7 Temmuz 2004
Mesajlar
12,302
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Evet ama, siz bu işleri neden C# forumlarında sormuyorsunuz da buralarda uğraşıyorsunuz?

.
 
Katılım
17 Haziran 2008
Mesajlar
1,840
Excel Vers. ve Dili
Microsoft Ofis Profesyonel 2019 x64 TR
Altın Üyelik Bitiş Tarihi
26-03-2020
Regex desen yapısı aynı yada çok yakın olduğu için.. C# forumlarınada soruyorum
 

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,251
Excel Vers. ve Dili
Office 2019 (64 bit) - Türkçe
.NET Regex Engine, bazen VBScript Regex' ten farklı davranabiliyor. Online .NET Regex tester ları kullanmanızı öneririm.
 

Haluk

𐱅𐰇𐰼𐰚
Katılım
7 Temmuz 2004
Mesajlar
12,302
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Zeki, nerelerdesin qardaş?

Yokluğunda buralarda debeleniyorum....

.
 

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,251
Excel Vers. ve Dili
Office 2019 (64 bit) - Türkçe
Biraz uzak kaldığım doğru... Gördüğüm kadarıyla bu tür konuyu gayet iyi götürüyorsun... ;)
 

Haluk

𐱅𐰇𐰼𐰚
Katılım
7 Temmuz 2004
Mesajlar
12,302
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
"Bu tür" de idare ediyoruz ama .... senin varlığın yeter ! :)

.
 
Katılım
17 Haziran 2008
Mesajlar
1,840
Excel Vers. ve Dili
Microsoft Ofis Profesyonel 2019 x64 TR
Altın Üyelik Bitiş Tarihi
26-03-2020
@Zeki Gürsoy

Evet test ediyorum.

@Haluk
"([\d+,.]+)" --> bu desenden hareketle konuyu çözmüş
bulunmaktayım.

Çok Teşekkür ediyorum.
 

Haluk

𐱅𐰇𐰼𐰚
Katılım
7 Temmuz 2004
Mesajlar
12,302
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Bilgi için;

Fonksiyondaki For-Next döngüsünü kaldırıp, "matches" adedini direkt olarak bulunarak kullanıldığı alternatif aşağıdadır.....

C++:
Function getData(myRng As Range)
    Dim regExp As Object, i As Integer
   
    If regExp Is Nothing Then
        Set regExp = CreateObject("VBScript.RegExp")
        regExp.Pattern = "([\d+,.]+)"
        regExp.Global = True
        regExp.IgnoreCase = True
    End If
   
    If regExp.Test(myRng) Then
        i = regExp.Execute(myRng).Count
        getData = regExp.Execute(myRng)(i - 1).SubMatches(0)
    Else
        getData = ""
    End If
End Function

.
 
Üst