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`)

誰かがこれがなぜなのか教えてもらえますか? そして、最初の2つだけを選択するように正規表現をどのように変更する必要がありますか?

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」に「\」がないことに注意してください。このテストで修正しました。)

最初の 2 つの例と一致し、2 番目の 2 つの例とは一致しないため、意図したとおりに機能していると思います。

于 2012-11-07T02:15:56.107 に答える