6

stringr パッケージを使用して正規表現を使用してテキストを抽出しようとしています。何らかの理由で、「無効な正規表現」エラーが発生します。いくつかの Web サイト テスト ツールで正規表現を試してみましたが、そこで動作するようです。R、特に stringr パッケージで正規表現がどのように機能するかについて、何かユニークな点があるかどうか疑問に思っていました。

次に例を示します。

string <- c("MARKETING:  Vice President", "FINANCE:  Accountant I",
"OPERATIONS: Plant Manager")

pattern <- "[A-Z]+(?=:)"
test <- gsub(" ","",string)
results <- str_extract(test, pattern)

これは機能していないようです。「MARKETING」、「FINANCE」、および「OPERATIONS」を「:」なしで取得したいと考えています。そのため、私は先読み構文を使用しています。次の方法を使用して、これを回避できることに気付きました。

pattern <- "[A-Z]+(:)"
test <- gsub(" ","",string)
results <- gsub(":","",str_extract(test, pattern))

しかし、近い将来、これよりも複雑な状況でルックアラウンドを使用する必要があるかもしれないと予想しています。

これを機能させるために、正規表現をいくつかのエスケープまたは何かで修正する必要がありますか?

4

2 に答える 2

6

先読みアサーションでは、正規表現をRのperl正規表現として識別する必要があります。

str_extract(string, perl(pattern))
# [1] "MARKETING"  "FINANCE"    "OPERATIONS"

ベースRでもこれを簡単に行うことができます。

regmatches(string, regexpr(pattern, string, perl=TRUE))
# [1] "MARKETING"  "FINANCE"    "OPERATIONS"

regexpr一致を見つけ、一致regmatchesデータを使用して部分文字列を抽出します。

于 2013-01-03T15:52:22.530 に答える
2

これは、グループ化を使用して直接行うことができsubます。

sub('^([A-Z]+):.*$', '\\1', string)

# [1] "MARKETING"  "FINANCE"    "OPERATIONS"

グループを行頭に固定し、1 つ以上の大文字を探して保存します。その後にコロンを:付け、その後に 0 個以上の文字を追加する必要があります。

于 2013-01-03T15:38:14.127 に答える