[Python-de] Re: [Python-de] Re: [Python-de] reguläre Ausdrücke

Dieter Neubauer neubauer at lni.de
Tue Apr 23 19:15:26 EDT 2002


-----Ursprüngliche Nachricht-----
Von: "Georg Mischler" <schorsch at schorsch.com>

> Ich bin auch kein Spezialist, aber die Geschichte mit den
> Strings duerfte fuer eine globale regex-Loesung doch ein kleines
> Hindernis darstellen. Das Hauptproblem dabei besteht darin, dass
> das Suchmuster keine einfache Moeglichkeit hat, zwischen dem
> Anfang und dem Ende eines Strings zu unterscheiden.
>
> Wenn ich selber vor dem Problem stuende, dann wurde ich mir eine
> kleine state-machine basteln, welche sich mit ein paar ganz
> simplen regex-Mustern Stueck fuer Stueck durch den Text hangelt.
> Wenn man so will, dann kriegt man auf diese Weise einen stark
> vereinfachten Syntax-Baum, der nur Strings, Kommentare, und
> anderen Text kennt... ;)

Sehe ich auch so...

Vielleicht hilft: <PythonPath>\Tools\Scripts\fixcid.py
Zugegeben, nicht gerade ein 3-Zeiler, aber da gibt es 'CommentStart' und
'CommentEnd' als reguläre Ausdrücke, was zumindest das Prinzip aufzeigen
sollte.

Noch was Einfacheres hätte ich in awk anzubieten, was sich leicht übertragen
läßt:

# +++Date last modified: 05-Jul-1997

# count lines in a C program, not counting comments, blank lines or
# form feeds
# does separate count of preprocessor directives
# if a preprocessor directive is commented out, it does not count
#
# By: Dan Kozak

{
 if (file == "") {
  file = FILENAME
 }
 if (file != FILENAME) {
  printf("Number of lines in %s is: %d\n",file,nl+ppd)
  printf("Number of preprocessor directives is: %d\n",ppd)
  printf("Number of lines excluding preprocessor directives is: %d\n\n",nl)
  file = FILENAME
  tnl += nl
  tppd += ppd
  nl = 0
  ppd = 0
 }

 if ($0 == "") { ; }
 else if ($1 ~ /^\/\*/ && $NF ~ /\*\/$/) { ; }
 else if ($0 ~ /\/\*/ && $0 !~ /\*\//) { in_comment = 1 }
 else if ($0 !~ /\/\*/ && $0 ~ /\*\//) { in_comment = 0 }
 else if (in_comment) { ; }
 else if ($1 ~ /^#/) { ppd++ }
 else { nl++ }
}

END { printf("Number of lines in %s is: %d\n",file,nl+ppd)
      printf("Number of preprocessor directives is: %d\n",ppd)
      printf("Number of lines excluding preprocessor directives is:
%d\n\n",nl)
      file = FILENAME
      tnl += nl
      tppd += ppd
      printf("Total number of lines is: %d\n",tnl+tppd)
      printf("Number of preprocessor directives is: %d\n",tppd)
      printf("Number of lines excluding preprocessor directives is:
%d\n",tnl)
    }


Gruß,
Dieter





More information about the Python-de mailing list