11

2 つの同一の記号で終わり、その後に「ter」が続く単語をグループ化し、2 つの記号で分割する正規表現を見つけようとしています。例: 「Letter」という単語は、「Let」と「ter」にグループ化する必要があります。私はPythonを使用していますが、これは私がこれまでに得たものです:

match = re.search(r'(\w*)((\w)\1(er$))', str)
print match.group(1) #should print 'Let'
print match.group(2) #should print 'ter'

問題は、(\w)\1 がグループ内のグループであるため、正しいグループを参照していないことです。これはどのように解決されますか?

前もって感謝します。

4

2 に答える 2

7

名前付きグループを使用しているのは、それらを簡単に参照できるようにするためです。

import re
pattern = r"""
          \b(?P<first_part>\w*(?P<splitter>\w))   # matches starting at a word boundary
          (?P<last_part>(?P=splitter)er\b)        # matches the last letter of the first group
                                                  # plus 'er' if followed by a word boundary
          """
matcher = re.compile(pattern, re.X)
print matcher.search('letter').groupdict()
# out: {'first_part': 'let', 'last_part': 'ter', 'splitter': 't'}
于 2013-05-11T11:38:16.507 に答える
1

最初のグループを 2 つの同一記号の最初の記号まで、2 番目のグループを 2 番目の同一記号の後に 'er' を含むすべてにしたい

それは次のようになります。

match = re.search(r'(\w*(\w)(?=\2))(\w*er$)', str)

print match.groups()
# -> ('Let', 't', 'ter')
于 2013-05-11T11:40:53.610 に答える