我有一个CREATE TABLE
文档,我需要获取所有表名的列表。这就是我所拥有的:
CREATE TABLE `mturk_reviewqueue` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`catalog_id` int(11) DEFAULT NULL,
`tv_series_id` int(11) DEFAULT NULL,
`added_on` datetime NOT NULL,
`correct_url` varchar(100) DEFAULT NULL,
`notes` varchar(400) DEFAULT NULL,
`completed_on` datetime DEFAULT NULL,
`completed_by_id` int(11) DEFAULT NULL,
`top_url` varchar(100) DEFAULT NULL,
`diff_score` decimal(5,2) DEFAULT NULL,
`ip_checkout` varchar(24) DEFAULT NULL,
`incorrect_original_url` varchar(100) DEFAULT NULL,
`fix_notes` varchar(1000) DEFAULT NULL,
`is_promotional_content` tinyint(1) DEFAULT NULL,
`contains_multiple_titles` tinyint(1) DEFAULT NULL,
`is_garbage_series` tinyint(1) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `completed_by` (`completed_by_id`),
KEY `catalog_id` (`catalog_id`),
KEY `tv_series_id` (`tv_series_id`),
CONSTRAINT `mturk_reviewqueue_ibfk_1` FOREIGN KEY (`completed_by_id`) REFERENCES `auth_user` (`id`),
CONSTRAINT `mturk_reviewqueue_ibfk_2` FOREIGN KEY (`catalog_id`) REFERENCES `main_catalog` (`id`),
CONSTRAINT `mturk_reviewqueue_ibfk_3` FOREIGN KEY (`tv_series_id`) REFERENCES `main_tvseriesinstance` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=196089 DEFAULT CHARSET=utf8;
-- Create syntax for TABLE 'mturk_worker'
CREATE TABLE `mturk_worker` (
`worker_id` varchar(22) NOT NULL DEFAULT '',
`notes` varchar(100) NOT NULL,
...等...
这就是我需要的:
mturk_reviewqueue
mturk_worker
etc...
到目前为止,我有:
r'CREATE\sTABLE\s`(.+)`\s\('
这让我得到了表名,但我似乎无法摆脱表名后的所有垃圾,但在下一个之前。什么是最好的正则表达式呢?
答案 0 :(得分:2)
r'CREATE\sTABLE\s`(.+?)`'
这应该为你做。
答案 1 :(得分:1)
如果您喜欢命令行选项。假设您的sql文件名为" foo":
cat foo | grep 'CREATE TABLE' | cut -d\` -f2
这适用于MacOS。
答案 2 :(得分:0)
这也应该有用(即使单词之间应该有多个空格)......
/CREATE\s+TABLE\s+`([^`]+)`/g
答案 3 :(得分:0)
如果您正在使用ack,则可以执行此操作:
ack 'CREATE TABLE `(.+)`' --output='$1'