Schrift
[thread]10317[/thread]

Erste Zahl in einem String finden

Leser: 1


<< |< 1 2 >| >> 12 Einträge, 2 Seiten
eddie_tedd
 2007-09-03 18:10
#99027 #99027
User since
2007-09-03
2 Artikel
BenutzerIn
[default_avatar]
Hi, hab schon lange nicht mehr programmiert und hab meine Bücher jetzt nicht zur Hand. Finde aber auch so jetzt nichts im web.

wie finde ich die erste zahl in einem string, mit index kann ich ja nur eine zahl angeben, oder ich hab den string falsch eingegeben.

sowas wie $pos=(index($string,/0-9/))
danke für eure hilfe.

erik
bieber
 2007-09-03 18:20
#99029 #99029
User since
2007-06-18
148 Artikel
BenutzerIn
[default_avatar]
CPAN:substr dürfte das gesuchte sein

index bestimmt nur die Position

edit: argh du willst ja die Position... sorry muss ich auch erst wieder probieren... bin auch aus langer Pause zurück^^
Es gibt immer Leute die meinen, sie seien schlauer als ich. Das Schlimmste ist, sie sind es auch.
sid burn
 2007-09-03 18:28
#99030 #99030
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
Einfach ein simpler match.

Code (perl): (dl )
my ($erste_zahl) = $string =~ m/(\d+)/
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
renee
 2007-09-03 18:29
#99031 #99031
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
1
2
C:\>perl -e "my $var = 'test124test'; $var =~ m/\d/g; print pos($var);"
5
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
renee
 2007-09-03 18:29
#99032 #99032
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
@sid_burn: Es ist nach der Position und nicht nach der Zahl gefragt ;-)
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
eddie_tedd
 2007-09-03 18:29
#99033 #99033
User since
2007-09-03
2 Artikel
BenutzerIn
[default_avatar]
1000 danke werd ich gleich mal ausprobieren..

liebe grüße Eddie
renee
 2007-09-03 18:34
#99034 #99034
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Als Performancefresser (nur mal wegen TIMTOWTDI genannt):

Code (perl): (dl )
1
2
3
my $var = 'test1234test';
$var =~ /\d/;
print length($`) + 1;


Wie gesagt, das ist ein Performancekiller, weil die Spezialvariable $` verwendet wird (siehe perlvar)
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
sid burn
 2007-09-03 20:11
#99035 #99035
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
renee+2007-09-03 16:29:43--
@sid_burn: Es ist nach der Position und nicht nach der Zahl gefragt ;-)

hmm, also ich interpretiere das, "gib mir die erste Zahl aus".
Quote
wie finde ich die erste zahl in einem string,

EDIT:
Ja stimmt, durch sein beispielcode wird es ersichtlich.



Aber ansonsten:
Code (perl): (dl )
1
2
3
my $string = 'Ich suche ein Zahl 123 oder irgendetwas anderes 23.';
my ($erste_zahl) = $string =~ m/(\d+)/;
printf "Es wurde [%d] beginnend an Position %d bis Position %d gefunden.\n", $erste_zahl, $-[1], $+[1];




Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
my $string = 'In Diesem 1en String sollen mehr als 10 Zahlen vorkommen.'.
             '2 Zahlen habe ich schon geschrieben. 4 sind mir zu viele.';

print "Nr:    Zahl: Begin:  Ende:\n";
print "--------------------------\n";

my $num = 1;
while ( $string =~ m/(\d+)/g ) {
    printf "%3d %8d %6d %6d\n", $num++, $1, $-[1], $+[1];
}
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
Strat
 2007-09-04 13:20
#99068 #99068
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
wenn man $- und $+ nicht verwenden will:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
my $string = 'Ich suche ein Zahl 123 oder irgendetwas anderes 23.';
if( my ($erste_zahl) = $string =~ m/(\d+)/ ) {
    my $pos = index( $string, $1 );

    printf "Es wurde [%d] beginnend an Position %d bis Position %d gefunden.\n", $erste_zahl, $pos, $pos + length( $erste_zahl);
}

# oder:
if( my ($prefix, $ersteZahl ) = $string =~ /^(\D*)(\d+)/ ) {
    printf "Position: %d\tZahl: $ersteZahl\n", length( $prefix );
}
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
murphy
 2007-09-04 15:37
#99074 #99074
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
Strat+2007-09-04 11:20:42--
wenn man $- und $+ nicht verwenden will:
[...]


Warum sollte man diese Variablen nicht verwenden wollen? Sie gehören jedenfalls nicht zu denen, die die Funktion der regulären Ausdrücke verlangsamen -- das sind laut perldoc nur $`, $& und $'.

Es ist doch sinnlose Verschwendung von Rechenzeit, mittels Index eine Information neu zu berechnen, die in diesen Variablen bereits vorliegt!
When C++ is your hammer, every problem looks like your thumb.
<< |< 1 2 >| >> 12 Einträge, 2 Seiten



View all threads created 2007-09-03 18:10.