4

次の 3 行があるとします。

the quick brown fox
the brown fox
the quick brown quick fox

正規表現を使用して、単語を除く各行のすべてを切り取ることはできますquickか?

最終結果は次のようになります。

quick

quickquick
4

4 に答える 4

4

詳細は使用している言語によって異なりますが、正規表現でこれを行うための一般的なアプローチをいくつか示します (Python のコード サンプル)。

  • ターゲット文字列のすべての一致を検索し、各一致を 1 つの文字列に結合します。

    >>> import re
    >>> s = 'the quick brown quick fox'
    >>> ''.join(re.findall('quick', s))
    'quickquick'
    
  • ターゲット文字列以外のすべてに一致する正規表現を作成し、各一致を空の文字列に置き換えます (これは通常、リストされている他の選択肢よりもはるかに困難です)

    >>> re.sub('(?!quick|(?<=q)uick|(?<=qu)ick|(?<=qui)ck|(?<=quic)k).', '', s)
    'quickquick'
    
  • キャプチャ グループを使用して、ターゲット文字列が出現するまですべてを照合し、ターゲット文字列だけに置き換えます。

    >>> re.sub('.*?(quick|$)', r'\1', s)
    'quickquick'
    

例のように文字列に複数の行がある場合は、最初に改行で文字列を分割するか、改行を維持するようにソリューションを適応させることができます。次に例を示します。

>>> s = '''the quick brown fox
... the brown fox
... the quick brown quick fox'''
>>> print ''.join(re.findall('quick|[\r\n]', s))
quick

quickquick
>>> print re.sub('.*?(quick|$)', r'\1', s, flags=re.MULTILINE)
quick

quickquick
于 2012-10-23T16:33:59.600 に答える
1

文字列の操作に正規表現だけを使用することはありません。パターンマッチングのみを行います。実装に使用しているツールによっては、通常、正規表現一致による文字列置換を行うことができます。たとえば、Bash ターミナルからは Sed を使用でき、PHP からは preg_replace() を使用できます。

于 2012-10-23T16:27:03.230 に答える
0

lookaheadはい、正規表現は、実装およびlookbehind構造によってその検索が可能です。

たとえば、必要なことを行う正の先読み式を使用する Python プログラムは次のとおりです。

import re

s = '''the quick brown fox
the brown fox
the quick brown quick fox'''

rx = re.compile('(?!quick).*')
print rx.findall(s)

出力:

['the quick brown fox', '', 'the brown fox', '', 'the quick brown quick fox', '']
于 2012-10-23T16:40:20.553 に答える