2

我想区分字符串

`citizen_group` int(10) NOT NULL,
`container_group` int(10) NOT NULL,

从像这样的字符串

PRIMARY KEY (`citizen_group`,`container_group`),
KEY `fk_containergroup_readeraccess` (`container_group`)

因此我创建了这个正则表达式

`?\w+`?\s\w+\(d+(,\s?\d+)?\)
   ^

*\w+`*   : string, wrapped in ` is possible.                `column`
\s       : followed by a space                       
\w+      : followed by one or more characters                real
\(d+     : followd by ( with one or more digits              (10
(,\s?\d)?: followed by 0 or 1 , with digits                  ,3
\)       : end with a )                                      )

但是这个正则表达式不仅选择前 2 个字符串,还选择最后一个

KEY `fk_containergroup_readeraccess` (`container_group`)

有人能告诉我这是为什么吗?以及我需要如何修改正则表达式以使其仅选择前两个?

4

1 回答 1

0

我用这个程序测试过:

import re, sys
for line in sys.stdin:
    match = re.search(r'`?\w+`?\s\w+\(\d+(,\s?\d+)?\)', line)
    if match:
        print match.group(0)

(请注意,您在左括号之后的 '\d' 中缺少 '\';我在此测试中修复了该问题。)

它与您的前两个示例匹配,但与您的后两个示例不匹配,因此我相信它可以按您的预期工作。

于 2012-11-07T02:15:56.107 回答