Permalänk
Medlem

regexp matches

str = Approved by:T. Eriksson(2014-04-03)@Checked by:A. Puvaneswaralingam(2014-04-03)@Prepared by:M. Hagenlöv(2014-04-03)@

Jag vill splitta få ut i matches fram till @ tecknet
Approved by:dd(2014-04-03)
Checked by:dd(2014-04-03)
Prepared by:dd(2014-04-03)

strängen går att manipulera lite grann men inte mycket

VBscript

Något tips?

revInt = "": revInt = a.revisions.count Set rev = a.revisions.item(revInt) str = "" For i = 1 To rev.Elements.Count Set revItem = rev.Elements.item(i) If revItem.CS.User.Label <> "" Then str = revItem.Description & revItem.CS.User.Label & "(" & revItem.CS.Login & ")" & "@" & str Next Set regEx = new RegExp With regEx .Global = True .IgnoreCase = True .Pattern = "(.*)" End With Set allMatches = regEx.Execute(str) Output allMatches.Count For Each x In allMatches Output "matches: " & x Next

Permalänk

str = Approved by:T. Eriksson(2014-04-03)@Checked by:A. Puvaneswaralingam(2014-04-03)@Prepared by:M. Hagenlöv(2014-04-03)@

str[] = str.Split('@');

foreach(var subStr in str[])
{
if(subStr.Lengt > 0)
PrintRow(subStr);
}

Permalänk
Hedersmedlem

Utan att ha rört VBScript på något drygt decennium så måste jag väl ändå anta att det finns någon `split()`-funktion i språket — Microsoft TechNet verkar referera till en sådan här. Använd den med `@` som avgränsare.

Edit: Just vad ovanstående demonstrerar.

Visa signatur

Nu med kortare användarnamn, men fortfarande bedövande långa inlägg.

Permalänk
Medlem
Skrivet av skurtbert:

str = Approved by:dd(2014-04-03)@Checked by:dd(2014-04-03)@Prepared by:dd(2014-04-03)@

str[] = str.Split('@');

foreach(var subStr in str[])
{
if(subStr.Lengt > 0)
PrintRow(subStr);
}

Glömde bort split, ville använda regexp av ngn anledning

Permalänk
Medlem

Är det excelsnurror hos elkonstruktion på G nu? Svårt att inte känna igen namnen

/Styrare

Visa signatur

Stationära | Define 7 Compact | RM750x White | X570S AERO G | Ryzen 5 5600x | NH-D15 Chromax | Flare X 4x8GB 3200MHz | RTX 4070 Super | MP600 1TB | 980 1TB | A2000 1TB | 970 EVO 500GB | 850 EVO 500GB |
Acer X34A + 2x Dell U2719D | Wave 1 | Arctis Nova Pro Wireless |
Laptop | Macbook Air M1 2020 | 16GB | 256GB |
3dkatten.se

Permalänk
Hedersmedlem
Skrivet av lappen81:

Glömde bort split, ville använda regexp av ngn anledning

…och plötsligt hade du två problem, liksom ordspråket gör gällande. Alternativt: när du har en hammare så ser allting ut som en spik (fritt översatt). Alternativt kan man säga att du ådrog dig en släng av Perlsjukan .

Visa signatur

Nu med kortare användarnamn, men fortfarande bedövande långa inlägg.

Permalänk
Medlem

Haha jo, försöker använda regexp då jag har svårt för det.

Men jag har fortfarande en chans, varför funkar inte detta?
Split borde ge mig 3 rader av ovanståenjde sträng men jag får 4 varav den 4 är tom, provade då med regexp för att trimma lite

Set re = New RegExp With re .Pattern = "\s+" .Global = True End With str = Trim(re.Replace(str, " ")) str2="" str2= Split(str, "@") Output ubound(str2)

Permalänk
Hedersmedlem
Skrivet av lappen81:

Haha jo, försöker använda regexp då jag har svårt för det.

Men jag har fortfarande en chans, varför funkar inte detta?
Split borde ge mig 3 rader av ovanståenjde sträng men jag får 4 varav den 4 är tom, provade då med regexp för att trimma lite

Set re = New RegExp With re .Pattern = "\s+" .Global = True End With str = Trim(re.Replace(str, " ")) str2="" str2= Split(str, "@") Output ubound(str2)

Du får n + 1 element för n avgränsare med `Split()`, vilket är naturligt. Du har tre stycken `@` i din sträng, vilket alltså ger fyra element. Det sista fältet tolkas vara tomt för att det inte finns något efter den sista avgränsaren.

Glöm reguljära uttryck även här, vilket är som att jaga älg med raketgevär.

Enklast är väl att bara ignorera det sista elementet, om du vet hur många fält det ska vara.

Näst enklast är att plocka bort ett tecken från höger i insträngen innan behandling (som då antas vara ett `@` — man kan även kontrollera att så verkligen är fallet, men se hur denna lösning redan börjar bli krånglig). `RTrim()` kan i VBScript tyvärr inte ta ett argument för att rensa ett visst tecken vad jag kan se, utan arbetar bara på mellanslag, men det går att emulera genom exempelvis:

str = Left(str, Len(str) - 1)

Men: det känns ändå enklare att bara skippa sista fältet som returneras av `Split()` om det är möjligt utifrån hur övrig data ser ut. Alternativt skippa alla tomma fält, men det kan möjligen ge större problem framöver (fast jag vet som sagt inte exakt hur din situation ser ut).

Visa signatur

Nu med kortare användarnamn, men fortfarande bedövande långa inlägg.

Permalänk
Medlem
Skrivet av phz:

Du får n + 1 element för n avgränsare med `Split()`, vilket är naturligt. Du har tre stycken `@` i din sträng, vilket alltså ger fyra element. Det sista fältet tolkas vara tomt för att det inte finns något efter den sista avgränsaren.

Glöm reguljära uttryck även här, vilket är som att jaga älg med raketgevär.

Enklast är väl att bara ignorera det sista elementet, om du vet hur många fält det ska vara.

Näst enklast är att plocka bort ett tecken från höger i insträngen innan behandling (som då antas vara ett `@` — man kan även kontrollera att så verkligen är fallet, men se hur denna lösning redan börjar bli krånglig). `RTrim()` kan i VBScript tyvärr inte ta ett argument för att rensa ett visst tecken vad jag kan se, utan arbetar bara på mellanslag, men det går att emulera genom exempelvis:

str = Left(str, Len(str) - 1)

Men: det känns ändå enklare att bara skippa sista fältet som returneras av `Split()` om det är möjligt utifrån hur övrig data ser ut. Alternativt skippa alla tomma fält, men det kan möjligen ge större problem framöver (fast jag vet som sagt inte exakt hur din situation ser ut).

I det här fallet fungerar Left perfekt, tack för hjälpen