0

正規表現を使用して、文字列の最初の単語と最後から 2 番目の文字を抽出したいと考えています。
たとえば、文字列で

                       "CSC 101 Intro to Computing  A  R"

キャプチャしたい

                        "CSC 101 A"

多分これに似た何か

                 grep -o -P '\w{3}\s\d{3}*thenIdon'tKnow*\s\w\s'

どんな助けでも大歓迎です。

4

3 に答える 3

1

あなたは行くことができます:

^((?:\w+\W+){2}).*(\w+)\W+\w+$

そして、グループ 1 + 2 を使用します。regex101.com で動作することを確認してください。


分解すると、次のようになります。

^                 # match the start of the line/string
(                 # capture group 1
    (?:\w+\W+){2} # repeated non-capturing group with words/non words
)
.*                # anything else afterwards
(\w+)\W+\w+       # backtracking to the second last word character
$
于 2016-10-24T08:00:31.540 に答える
0

正規表現パターン全体は、ばらばらのグループと一致することはできません。

Capture Groups を参照することをお勧めします。基本的には、2 つのバラバラなグループをキャプチャします。これら 2 つのグループを参照することで、一致した単語のペアを使用できます。

grep複数のキャプチャ グループを出力することsedはでき ません。
echo 'CSC 101 Intro to Computing A R' | sed -n 's/^\(\w\{3\}\s[[:digit:]]\{3\}\).*\?\(\w\)\s\+\w$/\1 \2/p'CSC 101 A
^(\w{3}\s\d{3}).*?(\w)\s+\w$

于 2016-10-24T05:41:07.733 に答える