Schrift
[thread]11429[/thread]

Reguläre Ausdrücke

Tags: Ähnliche Threads

Leser: 1


<< >> 9 Einträge, 1 Seite
no1gizmo
 2008-03-07 13:41
#106793 #106793
User since
2007-02-20
21 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hallo,

ich habe ein Problem mit den regulären Ausdrücken (die mir irgendwie jedes Jahr einmal begegnen und ich dann immer wieder ins kalte Wasser dabei falle).


Einen String, etwa wie:

Code: (dl )
\P{\H1.4x;Proximitar-Objekt, type Ni 22U-Q40-AP6X2-H1141,  Example,  see \fTimes New Roman|b0|i0|c0|p18;\C170;((B2 3503_0 Sh.14))}


Da will ich "Proximitar-Objekt, type Ni 22U-Q40-AP6X2-H1141, Example, see ((B2 3503_0 Sh.14))" raus haben. Also nur den text ohne RTF-Infos drumherum.

Den regulären Ausdruck dafür könnte man ja rech schnell aufstellen, nur ist das Problem, dass es keine feste Reihenfolge für die Infos gibt, es könnte auch erst der Text kommen, dann die Infos oder umgekehrt oder wie in diesem Fall, durchmischt.

Wie kann man den reg. Ausdruck so ausrichten, dass er einfach nur den Text herausfischt, also alles, was [\w] entspricht?
no1gizmo
 2008-03-07 13:42
#106795 #106795
User since
2007-02-20
21 Artikel
BenutzerIn
[Homepage] [default_avatar]
Doppelpost :-( sorry!! Bitte löschen..
renee
 2008-03-07 13:48
#106796 #106796
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Das sieht nach LaTeX oder so aus. Für LaTeX gibt es - soweit ich weiß - ein CPAN-Modul zum Parsen...
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/
murphy
 2008-03-07 14:39
#106797 #106797
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
Für mich sieht das eher nach RTF aus -- vielleicht hilft da ja CPAN:File::Extract::RTF weiter.
When C++ is your hammer, every problem looks like your thumb.
no1gizmo
 2008-03-11 13:11
#106936 #106936
User since
2007-02-20
21 Artikel
BenutzerIn
[Homepage] [default_avatar]
Danke Jungs, leider ist es doch nicht so ganz einfach.

1) ist es leider kein Latex und auch kein RTF (hatte ich zuerst auch gedacht). Latex kenne ich selber ganz gut. Als RTF Infos einlesen (z.B. in eine Textbox.RTF) funktioniert auch nicht. Ich muss es wohl mit Regulären Ausdrücken lösen.

2) Arbeite ich gerade nicht auf Perl (dass es diese Module gibt, ist aber gut zu wissen!). Ich arbeite gerade mit C#. Aber bei Regulären Ausdrücken ist das ja (fast) egal. (da aber hier Experten für Reguläre Ausdrücke sind, frage ich hier)

Also ich sehe dem String nun an, dass all das, was ich nicht brauche mit \H oder \f anfängt und mit einem Semikolon aufhört. Das will ich herausfiltern mit einem Muster in Regulären Ausdrücken.

Leider bekomme ich den Ausdruck nicht hin.

Er sollte so lauten: Suche alles, was nicht zwischen einem "\H" (oder "\f") und einem Simikolon steht.

Also vielleicht etwa so: (?!)

"(^[\H]^[\f]^;)" (alles außer "\H", "\f" und ";")

Oder: Entferne alles, was zwischen einem "\H" (oder "\f") und einem Simikolon steht.
moritz
 2008-03-11 13:17
#106937 #106937
User since
2007-05-11
923 Artikel
HausmeisterIn
[Homepage]
user image
Code (perl): (dl )
1
2
3
4
5
s{
   \\ [Hf]   # start eines tokens
   [^;]*     # alles ausser ;
   ;
}{}x; # ersetze mit mit leerem String


Das sollte mit C# änlich gehen, nur nicht mit so schöner Syntax ;-)
Linuxer
 2008-03-11 13:21
#106938 #106938
User since
2006-01-27
3890 Artikel
HausmeisterIn

user image
Hi,

Quote
Oder: Entferne alles, was zwischen einem "\H" (oder "\f") und einem Simikolon steht.


Vorschlag:
Code (perl): (dl )
$text =~ s{\\[Hf][^;]+;}{}g;
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
renee
 2008-03-11 13:23
#106939 #106939
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
In Perl würde ich es dann vermutlich so ungefähr machen:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
#!/usr/bin/perl

use strict;
use warnings;

my $string = '\P{\H1.4x;Proximitar-Objekt, type Ni 22U-Q40-AP6X2-H1141,  Example,  see \fTimes New Roman|b0|i0|c0|p18;\C170;((B2 3503_0 Sh.14))}';
my ($text) = $string =~ m~ \\P\{ (.*) \} ~x;
$text =~ s!\\[A-Za-z].*?;!!g;
print $text;


Keine Ahnung, ob das auch in C# so funktioniert.
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/
no1gizmo
 2008-03-11 13:28
#106940 #106940
User since
2007-02-20
21 Artikel
BenutzerIn
[Homepage] [default_avatar]
@moritz: Genial! DANKE!

In C# siehts dann so aus:

Code: (dl )
1
2
3
Regex regex = new Regex(@"\\[HfC][^;]*;");

return_string = regex.Replace(line, "");


Neben \H und \f ist noch \C hinzugekommen.

Die Variable "line" ist der Quellstring, z.B.:

\P{\H1.4x;Proximitar-Objekt, type Ni 22U-Q40-AP6X2-H1141, Example, see \fTimes New Roman|b0|i0|c0|p18;\C170;((B2 3503_0 Sh.14))}


Nochmals Danke @moritz, auch an renee und murphy!

EDIT: So viele Antworten in kurzer Zeit!? UIIIiiii.
Danke. Auch der von Linuxer vorgeschlagene reg. Ausdruck funktioniert.
<< >> 9 Einträge, 1 Seite



View all threads created 2008-03-07 13:41.