Schrift
[thread]8814[/thread]

Zahlen bestimmter Größe im Text finden: RegEx Parser

Leser: 1


<< |< 1 2 >| >> 14 Einträge, 2 Seiten
Gast Gast
 2007-03-06 18:30
#74810 #74810
Hallo,
ich möchte in einer größeren Textdatei alle Zahlen zwischen 0 und 57 mit Hilfe eines regulären Ausdrucks finden. Gibt es da eine elegantere Möglichkeit als /(0|1|2|3|"etc."|56|57)/g? Als Klasse, also [0-57] kann ich den Bereich leider nicht definieren, da die einzelnen Zeichen ja nur einstellig sein können.

Vielen Dank
muol
GoodFella
 2007-03-06 19:47
#74811 #74811
User since
2007-01-09
192 Artikel
BenutzerIn
[default_avatar]
Stellt sich die Frage:

Angenommen, der String ist "1234";

..Soll der Regex nur 1 2 3 und 4 finden oder auch 12 23 und 34 .. oder vielleicht eine Kombination beider?
Ronnie
 2007-03-06 20:57
#74812 #74812
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/usr/bin/perl 

use strict;
use warnings;

my $num = join '|', map { "\\b$_\\b" } 0..57;
my $re_num = qr/($num)/;

while(<DATA>) {
my $match = join ', ', m/$re_num/g;
print $. . "\t=>\t" . $match . "\n" if $match;
}


__DATA__
Hallo,
ich möchte in einer größeren Textdatei alle Zahlen zwischen 0 und 57 mit Hilfe
eines regulären Ausdrucks finden. Gibt es da eine elegantere Möglichkeit als
/(0|1|2|3|"etc."|56|57)/g? Als Klasse, also [0-57] kann ich den Bereich leider
nicht definieren, da die einzelnen Zeichen ja nur einstellig sein können.

Vielen Dank
muol
\n\n

<!--EDIT|Ronnie|1173207479-->
topeg
 2007-03-06 22:08
#74813 #74813
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Das findet alle Zahlen von 0 bis 53:
Code (perl): (dl )
my @zahlen=$string=~/\D([1234]?\d|5[0123])\D/gc;
docsnyder
 2007-03-07 14:58
#74814 #74814
User since
2005-09-08
300 Artikel
BenutzerIn
[Homepage] [default_avatar]
oder so:

Code: (dl )
$line =~ s!(\d+)!print("$1\n") if ( $1 < 58 )!eg;


Gruss, Doc
bloonix
 2007-03-07 15:32
#74815 #74815
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
[quote=topeg,06.03.2007, 21:08]Das findet alle Zahlen von 0 bis 53:
Code (perl): (dl )
my @zahlen=$string=~/\D([1234]?\d|5[0123])\D/gc;
[/quote]
matched aber nicht

001
002
003
...
053
\n\n

<!--EDIT|opi|1173274349-->
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
Ishka
 2007-03-07 15:50
#74816 #74816
User since
2003-08-04
771 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Wenn du die auch noch finden willst, häng halt noch ein 0* mit rein, also
\D0*([1234]?\d|5[0123])\D
sub z{if(@_){1while$x[$k=rand 10];t($t=$x[$k]=1)}print map"$z[$x[$_]]$_".($_%3?
"":"\n"),1..9}sub t{$j=0;$x[$_+1]==$t&&($j+=2**$_)for 0..8;z,die"Gewinner $z[$t]
"if grep$_==($j&$_),7,56,73,84,146,273,292,448;z,die"Gleichstand\n"if@x>9&&!grep
!$_,@x}@x=4;@z=qw{. [ (};z$^T&1;while(<>){next if$_>9||$x[$_];t$t=$x[$_]=2;z 1}
bloonix
 2007-03-07 15:58
#74817 #74817
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
[quote=Ishka,07.03.2007, 14:50]Wenn du die auch noch finden willst, häng halt noch ein 0* mit rein, also
\D0*([1234]?\d|5[0123])\D[/quote]
nun, bei mir matched es überhaupt nichts, weil ein \D am Anfang und am
Ende der zahl vorausgesetzt wird =) hinzu kommt, das nach einem \D
eine null vorausgesetzt wird\n\n

<!--EDIT|opi|1173275968-->
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
renee
 2007-03-07 16:00
#74818 #74818
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Die 0 wird nicht vorausgesetzt, weil das * 0,1 oder viele male bedeutet...
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/
bloonix
 2007-03-07 16:09
#74819 #74819
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
[quote=renee,07.03.2007, 15:00]Die 0 wird nicht vorausgesetzt, weil das * 0,1 oder viele male bedeutet...[/quote]
Jauh, stimmt, aber leider besteht da noch immer das Problem, das eine
"Nichtzahl" am Anfang und am Ende verlangt wird.

Code: (dl )
1
2
3
4
5
6
7
8
use strict;
use warnings;

my @strings = ('foo 1 bar', '1 foo bar', 'foo bar 1');

for my $string (@strings) {
print "$string\n" if $string =~ /\D0*([1234]?\d|5[0123])\D/gc;
}


foo 1 bar

Edit: Code hinzugefügt\n\n

<!--EDIT|opi|1173276725-->
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
<< |< 1 2 >| >> 14 Einträge, 2 Seiten



View all threads created 2007-03-06 18:30.