はここで、これはgregexpr()
+ regmatches()
で行うことができます方法は次のとおりです。
ipartRE <- '\\d+';
fpartRE <- '\\.\\d+';
numRE <- paste0(ipartRE,'(?:',fpartRE,')?');
rangeRE <- paste0(numRE,'(?:\\s*-\\s*',numRE,')?');
pat <- paste0(rangeRE,'\\s*[a-zA-Z]{1,3}\\b');
regmatches(t1,gregexpr(perl=T,pat,t1))[[1L]];
## [1] "3-4 cm" "5.6 m" "10 m"
私が築き上げ人間の読みやすさのためにコンポーネント部分からのインクリメンタルな正規表現ですが、明らかにそうする必要はありません。
新しいパターンと一致させるには、番号を囲むカッコが一致する2番目の番号を変更する必要があります。また、私はない通常のASCII hyphenで120(–150) cm
でダッシュことがわかったが、en dashで、私はすべての3つの一般的なダッシュ種類(半角ダッシュASCII、およびem dash)と一致dashRE
と呼ばれる別の予め計算された正規表現の作品を追加:
を
ipartRE <- '\\d+';
fpartRE <- '\\.\\d+';
numRE <- paste0(ipartRE,'(?:',fpartRE,')?');
dashRE <- '[—–-]';
rangeOptParenRE <- paste0(numRE,'(?:\\s*(?:',dashRE,'\\s*',numRE,'|\\(\\s*',dashRE,'\\s*',numRE,'\\s*\\)\\s*))?');
pat <- paste0(rangeOptParenRE,'\\s*[a-zA-Z]{1,3}\\b');
regmatches(t1,gregexpr(perl=T,pat,t1))[[1L]];
## [1] "3-4 cm" "120(–150) cm" "5.6 m" "10 m"
人々が遊ぶために使用できるデータ(おもちゃの例)を提供できると便利です。 – milan
提案: 'gregexpr'と' regmatches'または 'stringi'パッケージと' stri_extract_all'関数があります。 'gsub'も動作させることができます。 – Jota