私は文字列'aabaaa'
を持っています。正規表現を使用して連続する文字を取得すると、次のようなものが得られますか?文字列内の連続する文字を取り込む方法
[['aa'], ['b'], ['aaa']]
各文字が連続して何回出現するかを調べたいと思っています。 Rubyで
私は文字列'aabaaa'
を持っています。正規表現を使用して連続する文字を取得すると、次のようなものが得られますか?文字列内の連続する文字を取り込む方法
[['aa'], ['b'], ['aaa']]
各文字が連続して何回出現するかを調べたいと思っています。 Rubyで
:
ルビー> = 2.4
'aabaaa'.each_char.chunk_while(&:==).map(&:join) # or .map(&:length)
#⇒ ["aa", "b", "aaa"]
ルビー> = 2.3(CREDそのケーリーSwovelandへ)
'aabaaa'.each_char.chunk(&:itself).map(&:join)
∀ルビー
'aabaaa'.scan(/(\w)(\1*)/).map(&:join)
#⇒ ["aa", "b", "aaa"]
'aabaaa'.scan(/(\w)(\1*)/).map(&:join).map(&:length)
#⇒ [2, 1, 3]
完璧に動作します。私はchunk_whileを認識していませんでしたが、それは非常にきれいです! –
Ruby v2.4のソリューションはありませんか? > = 2.3の場合は、 ''aabaaa.each_char.chunk(&:自体).map(&:join)'(それ自体は2.3となっています)を考えてください。 –
@CarySwovel実際、ありがとうございます。 – mudasobwa
、
'aabaaa'.scan(/(?<s>(?<c>.)\k<c>*)/).map(&:first)
# => ["aa", "b", "aaa"]
'aabaaa'.scan(/(?<s>(?<c>.)\k<c>*)/).map{|s, _| s.length}
# => [2, 1, 3]
あなたはキャプチャグループまたはワードキャプチャグループが続かないの1以上続く単語文字に一致するようにRegExp
/(\w)(?=\1|[^\1])\1+|(\w)(?!\2)/g)
でString.prototype.match()
を使用することができます。
@mudasobwaが提案するように、RegExp
/(\w)(\1*)/g
を使用してください。
それぞれの一致するグループの.length
を取得するには、配列を作成し、一致の配列を繰り返し、一致する最初の要素または一致したグループ自体にプロパティを設定します。または、Array.prototype.map()
を使用して、一致する各グループの.length
を返します。ただ、好奇心のうち
"aabaaa".match(/(\w)(?=\1)\1+|(\w)(?!\2)/g)
let str = "aabaaa";
let groups = str.match(/(\w)(?=\1)\1+|(\w)(?!\2)/g);
let matches = [];
for (let match of groups) {
matches.push({[match]: match.length});
}
let len = groups.map(({length}) => length);
console.log(groups, matches, len);
'str.match(/(\ 1 *)/ g)' – mudasobwa
私は正規表現を試みるウェブベースのツールであるhttp://www.regexr.com/ – dee
[ '(\ w)を\ 1 {0、} '](https://regex101.com/r/M4yy4O/1) –
@CarySwovelandはい、投稿を編集しました! –