1

私は持っている:

TYPO3 4.2 is installed on machine ...
Winamp is installed on machine ...
Winrar 3.20 is installed on machine ...

文中のソフトウェア パッケージ名を区切るための正規表現を作成するにはどうすればよいですか。上記はソフトウェア\バージョンの例ですが、文は必ずしも同じではなく、バージョンが表示されない場合もあります。reがどのようにできるかについてのヒントはありますか?このトピックを見つけましたが、それはバージョン専用です:バージョン番号の正規表現

いくつかのコメントを読んだときに、次のようなものを入れるのを忘れていました。

  • ソフトウェア版は定型がなくドット区切りです

  • ソフトウェアの名前はバージョンの前です

  • ソフトウェア名を知っている可能性がありますが、上記の文と同じ構造になっていないテキストでそのバージョンを見つける方法はありますか?
  • 上記の文は標準ではありません。
4

3 に答える 3

6

あなたが示したデータについて:

version = sentence.partition(" is installed on")[0]

正規表現は必要ありません。「がインストールされる」前にすべてを取得してください。

于 2012-06-27T11:27:45.017 に答える
0

さて、次のヒューリスティックを使用できます。

  1. 「インストールされています」は、ソフトウェア名とバージョンが終了するマーカーです
  2. バージョンにはスペースが含まれておらず、数字またはドットのみが含まれています
  3. バージョンの前はすべてソフトウェアの名前です

次に、次のようなものを使用できます。

(.*?) ([\d.]+ )?is installed

最初のグループはソフトウェア名、2 番目のグループはバージョン (存在する場合) です。

クイック PowerShell テスト:

PS> $strings = 'TYPO3 4.2 is installed on machine ...','Winamp is installed on machine ...', 'Winrar 3.20 is installed on machine ...'
PS> $strings | %{ $null = $_ -match '(.*?) ([\d.]+ )?is installed'; "Software: " + $Matches[1] + ", version: " + $Matches[2] }
Software: TYPO3, version: 4.2
Software: Winamp, version:
Software: Winrar, version: 3.20
于 2012-06-27T11:30:00.303 に答える
0

データに関する詳細情報を提供してください(私のコメントを参照してください)

プログラム名が常に 1 語の場合:
m = re.search(r'(?P<name>\S+?) (?P<version>([\d.]+ )?)', text)

文が「is」または「installed」で始まる場合:
m = re.search(r'(?P<name>(\S\s)+?)(?P<version>([\d.]+ )?)(is|installed)', text)

name = m.group('name').strip()
version = m.group('version').strip()
于 2012-06-27T12:31:26.040 に答える