2

mysql構造ダンプを含む文字列があります。

...
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

--
-- Table structure for table `contig`
--

DROP TABLE IF EXISTS `contig`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `contig` (
  `id` int(10) NOT NULL,
  `seq` varchar(1000) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_c
..

次に、テーブルの作成クエリを含む各文字列を選択します。re.findall私はこれをいくつかの正規表現で試しました(例(CREATE TABLE)(.*)[^;]*

しかし、私が試した各正規表現はせいぜい戻ってきました[('CREATE TABLE', " 'contig' (")]。しかし、クエリ全体をリストの1つの要素として使用したいと思います。ブレークラインを削除しようとrstripしましたが、何も機能しませんでした。

各INSERTINTOクエリ全体を取得するにはどうすればよいですか?

4

1 に答える 1

4

正規表現を使用してネストされた括弧シーケンスを選択することはできません。したがって、実行したいタスクは解決できません。

しかし、ハックとして、次のようなことを試すことができます。

>>> re.findall('CREATE TABLE[^;]+;', s)
['CREATE TABLE `contig` (...) ENGINE=InnoDB DEFAULT CHARSET=latin1;']

一部(.*)が正規表現で超過しています。

于 2012-10-11T22:02:59.827 に答える