【Nim】文字列操作
Nimでの文字列操作関連をまとめてみました。
Nimのバージョンは 0.17.2 を想定しています。( 執筆時の最新バージョン )
文字列の基本
文字、文字列リテラル
記法 | 名称 | 備考 |
---|---|---|
'a' | 文字リテラル(Character literal) | |
"abc" | 文字列リテラル(String literal) | |
r"abc" | Raw文字列リテラル(Raw string literal) | エスケープシーケンス無効 |
"""abc""" | 3重クオート文字列リテラル(Triple quoted string literal) | エスケープシーケンス無効 改行可能 " をそのまま使用可能 |
文字、文字列型
型 | 説明 |
---|---|
char | 文字を表す。C言語のcharと同じく1バイト。 |
string | 通常はこのstring型を使う |
cstring | C言語文字列を表す。cstringとstringは相互に変換が可能になっている。 |
文字列関連モジュール
- strutils : メジャーな文字列操作
- strmisc : マイナーな文字列操作
- parseutils : パース関連
- strtabs : 文字列特化のハッシュテーブル
- unicode : ユニコード(UTF8)関連
- encodings : 文字コード変換関連
- ropes : ロープによる文字列実装(連結が高速)
- subexes : 独自の置換記法による文字列置換
- strformat : Python風書式
標準モジュール(system,strutils)の文字列関連プロシージャ
プロシージャの説明は推測で書いている部分もあるので、もしかしたら間違っているかもしれません。
判定
プロシージャ | 引数:戻り値 | 説明 | モジュール |
---|---|---|---|
`==` | (x, y: string): bool | 文字列が一致するかどうか | system |
isNil | (x: string): bool | nilかどうかを取得 (stringは初期値がnil) | system |
contains | (s: string; c: char): bool (s, sub: string): bool (s: string; chars: set[char]): bool | 含まれるかどうかを取得する | strutils |
isAlphaAscii | (c: char): bool | 文字列がa-z,A-Zの範囲のみかどうかを取得する | strutils |
isAlphaNumeric | (c: char): bool | 文字列がa-z,A-Z,0-9の範囲のみかどうかを取得する | strutils |
isDigit | (c: char): bool | 文字列が0-9の範囲のみかどうかを取得する | strutils |
isSpaceAscii | (c: char): bool | 文字列が空白のみかどうかを取得する | strutils |
isLowerAscii | (c: char): bool | 小文字のみかどうかを取得する | strutils |
isUpperAscii | (c: char): bool | 大文字のみかどうかを取得する | strutils |
isNilOrEmpty | (s: string): bool | nilもしくは空文字かどうかを取得する | strutils |
isNilOrWhitespace | (s: string): bool | nilもしくは空白のみかどうかを取得する | strutils |
startsWith | (s, prefix: string): bool (s: string; prefix: char): bool | 指定の文字列で始まっているかどうかを取得する | strutils |
endsWith | (s, suffix: string): bool (s: string; suffix: char): bool | 指定の文字列で終わっているかどうかを取得する | strutils |
continuesWith | (s, substr: string; start: Natural): bool | 指定の位置から指定の文字列で始まっているかどうかを取得する | strutils |
allCharsInSet | (s: string; theSet: set[char]): bool | 文字列内のすべての文字が指定の文字セットに含まれているかどうか | strutils |
validIdentifier | (s: string): bool | 識別子として正当化どうかを取得する | strutils |
比較
プロシージャ | 引数:戻り値 | 説明 | モジュール |
---|---|---|---|
`<=` | (x, y: string): bool | 文字列の比較 | system |
`<` | (x, y: string): bool | 文字列の比較 | system |
cmp | (x, y: string): int | 文字列の比較 | system |
cmpIgnoreCase | (a, b: string): int | 大文字小文字を無視した比較 | strutils |
cmpIgnoreStyle | (a, b: string): int | 文字列を正規化した上で比較 | strutils |
editDistance | (a, b: string): int | 2つの文字列の編集距離(レーベンシュタイン距離)を取得する | strutils |
検索
プロシージャ | 引数:戻り値 | 説明 | モジュール |
---|---|---|---|
count | (s: string; sub: string; overlapping: bool = false): int (s: string; sub: char): int (s: string; subs: set[char]): int | 出現回数を取得する | strutils |
countLines | (s: string): int | 行数を取得する | strutils |
find | (s, sub: string; start: Natural = 0; last: Natural = 0): int (s: string; sub: char; start: Natural = 0; last: Natural = 0): int (s: string; chars: set[char]; start: Natural = 0; last: Natural = 0): int | 指定の文字の位置を検索する | strutils |
rfind | (s, sub: string; start: int = - 1): int (s: string; sub: char; start: int = - 1): int (s: string; chars: set[char]; start: int = - 1): int | 指定の文字の位置を検索する(末尾から検索する) | strutils |
abbrev | (s: string; possibilities: openArray[string]): int | 指定の文字列リストの中から一致するもののインデックスを取得する(略語展開?) | strutils |
情報取得
プロシージャ | 引数:戻り値 | 説明 | モジュール |
---|---|---|---|
len | (x: string): int | 文字列の長さを取得 | system |
low | (x: string): int | 先頭インデックスを取得(たぶん常に0) | system |
high | (x: string): int | 末尾インデックスを取得(空文字なら-1) | system |
非文字列化(string -> XXX)
プロシージャ | 引数:戻り値 | 説明 | モジュール |
---|---|---|---|
parseInt | (s: string): int | 文字列をint化する | strutils |
parseBiggestInt | (s: string): BiggestInt | 文字列をint化する | strutils |
parseUInt | (s: string): uint | 文字列をuint化する | strutils |
parseBiggestUInt | (s: string): BiggestUInt | 文字列をuint化する | strutils |
parseFloat | (s: string): float | 文字列をfloat化する | strutils |
parseOctInt | (s: string): int | 8進数文字列をint化する | strutils |
parseHexInt | (s: string): int | 16進数文字列をint化する | strutils |
parseBool | (s: string): bool | 文字列をbool化する | strutils |
parseEnum | [T: enum](s: string): T [T: enum](s: string; default: T): T | 文字列をenum値化する | strutils |
文字列化(XXX -> string)
プロシージャ | 引数:戻り値 | 説明 | モジュール |
---|---|---|---|
repr | [T](x: T): string | オブジェクトの文字列表現を取得 | system |
`$` | (x: int): string | オブジェクトの文字列表現を取得 | system |
toHex | (x: BiggestInt; len: Positive): string | 16進数表現文字列を取得する | strutils |
toOctal | (c: char): string | 8進数表現文字列を取得する | strutils |
toOct | (x: BiggestInt; len: Positive): string | 8進数表現文字列を取得する | strutils |
toBin | (x: BiggestInt; len: Positive): string | 2進数表現文字列を取得する | strutils |
intToStr | (x: int; minchars: Positive = 1): string | int型を文字列化する | strutils |
formatBiggestFloat | (f: BiggestFloat; format: FloatFormatMode = ffDefault; precision: range[0 .. 32] = 16; decimalSep = '.'): string | float型を文字列化する | strutils |
formatFloat | (f: float; format: FloatFormatMode = ffDefault; precision: range[0 .. 32] = 16; decimalSep = '.'): string | float型を文字列化する | strutils |
formatSize | (bytes: int64; decimalSep = '.'; prefix = bpIEC; includeSpace = false): string | 数値のデータサイズ表現文字列を取得する | strutils |
formatEng | (f: BiggestFloat; precision: range[0 .. 32] = 10; trim: bool = true; siPrefix: bool = false; unit: string = nil; decimalSep = '.'): string | 数値の工学表記文字列を取得する | strutils |
新規string作成
プロシージャ | 引数:戻り値 | 説明 | モジュール |
---|---|---|---|
newString | (len: Natural): string | 長さ指定で新規作成 | system |
newStringOfCap | (cap: Natural): string | キャパシティ指定で新規作成 | system |
複製
プロシージャ | 引数:戻り値 | 説明 | モジュール |
---|---|---|---|
copy | (s: string; first = 0): string (s: string; first, last: int): string | 文字列を複製 | system |
substr | (s: string; first = 0): string (s: string; first, last: int): string | 文字列の一部分を複製 | system |
`[]` | (s: string; x: Slice[int]): string | 文字列の一部分を複製 | system |
合成
プロシージャ | 引数:戻り値 | 説明 | モジュール |
---|---|---|---|
`&` | (x, y: string): string (x: char; y: string): string (x: string; y: char): string (x, y: char): string | 連結で新規作成 | system |
`&=` | (x: var string; y: string) | 文字列を末尾に追加 | system |
add | (x: var string; y: char) (x: var string; y: string) (x: var string; y: cstring) (result: var string; x: int64) (result: var string; x: float) | 文字列を末尾に追加 | system |
safeAdd | (x: var string; y: char) (x: var string; y: string) | 文字列を末尾に追加 | system |
insert | (x: var string; item: string; i = 0.Natural) | 文字列を指定のインデックスに挿入 | system |
`[]=` | (s: var string; x: Slice[int]; b: string) | 文字列を指定の範囲に挿入 | system |
repeat | (c: char; count: Natural): string | 文字を指定回数連続させた文字列を取得する | strutils |
repeat | (s: string; n: Natural): string | 文字列を指定回数連続させた文字列を取得する | strutils |
join | (a: openArray[string]; sep: string = ""): string | 文字列リストを連結する | strutils |
整形
プロシージャ | 引数:戻り値 | 説明 | モジュール |
---|---|---|---|
strip | (s: string; leading = true; trailing = true; chars: set[char] = Whitespace): string | 先頭と末尾の空白を除去した文字列を取得する。引数で先頭のみ末尾のみ、空白以外の文字を指定ができる | strutils |
align | (s: string; count: Natural; padding = ' '): string | 文字寄せを行った文字列を取得する | strutils |
wordWrap | (s: string; maxLineWidth = 80; splitLongWords = true; seps: set[char] = Whitespace; newLine = "\x0D\x0A"): string | ワードラップを行った文字列を取得する | strutils |
indent | (s: string; count: Natural; padding: string = " "): string | インデントを行った文字列を取得する | strutils |
unindent | (s: string; count: Natural; padding: string = " "): string | インデント解除を行った文字列を取得する | strutils |
center | (s: string; width: int; fillChar: char = ' '): string | 文字列の中央寄せを行う | strutils |
insertSep | (s: string; sep = '_'; digits = 3): string | 数字文字列にセパレータを追加した文字列を取得する | strutils |
escape | (s: string; prefix = "\""; suffix = "\""): string | エスケープ文字をエスケープした文字列を取得する | strutils |
unescape | (s: string; prefix = "\""; suffix = "\""): string | escapeの逆 | strutils |
trimZeros | (x: var string) | 末尾の0を除去する | strutils |
addSep | (dest: var string; sep = ", "; startLen: Natural = 0) | 指定の長さ以降にセパレータ文字列を追加する | strutils |
置換
プロシージャ | 引数:戻り値 | 説明 | モジュール |
---|---|---|---|
replace | (s, sub: string; by = ""): string | 置換した文字列を取得する | strutils |
replaceWord | (s, sub: string; by = ""): string | 単語置換した文字列を取得する | strutils |
multiReplace | (s: string; replacements: varargs[(string, string)]): string | 複数置換に特化したreplace | strutils |
toLowerAscii | (c: char): char | 大文字を小文字化したものを取得 | strutils |
toUpperAscii | (c: char): char | 小文字を大文字化したものを取得 | strutils |
capitalizeAscii | (s: string): string | 最初の文字を大文字化したものを取得 | strutils |
normalize | (s: string): string | 正規化したものを取得。正規化とは具体的には小文字化し_を除去する。(Nimの識別子ルールで利用される) | strutils |
`%` | (formatstr: string; a: openArray[string]): string (formatstr, a: string): string | 書式文字列を作成する | strutils |
format | (formatstr: string; a: varargs[string, `$`]): string | strutils | |
addf | (s: var string; formatstr: string; a: varargs[string, `$`]) | 書式で文字列を追加する | strutils |
fmt"" | (pattern: static string; openChar: static char; closeChar: static char): string | Python風書式文字列を作成する。""内はraw string literalsとして扱われることに注意(\nはそのまま\nとして扱われる。改行コードを使いたい場合は{'\n'}とする) | strformat |
`&` | (pattern: static string; openChar: static char; closeChar: static char): string | Python風書式文字列を作成する。fmt""とは違い""内は普通のstring literalsとして扱われる | strformat |
削除
プロシージャ | 引数:戻り値 | 説明 | モジュール |
---|---|---|---|
delete | (s: var string; first, last: int) | 指定の範囲を削除する | strutils |
removeSuffix | (s: var string; chars: set[char] = Newlines) | 指定の末尾の文字列を除去する | strutils |
分割
プロシージャ | 引数:戻り値 | 説明 | モジュール |
---|---|---|---|
splitWhitespace | (s: string): seq[string] | 文字列を空白で分割したものを取得する | strutils |
[iterator] splitWhitespace | (s: string): string | 文字列を空白で分割したものを取得する | strutils |
splitLines | (s: string): seq[string] | 文字列を行ごとに分割したものを取得する | strutils |
[iterator] splitLines | (s: string): string | 文字列を行ごとに分割したものを取得する | strutils |
split | (s: string; seps: set[char] = Whitespace; maxsplit: int = - 1): seq[string] (s: string; sep: char; maxsplit: int = - 1): seq[string] (s: string; sep: string; maxsplit: int = - 1): seq[string] | 文字列を任意の文字(列)で分割したものを取得する | strutils |
[iterator] split | (s: string; seps: set[char] = Whitespace; maxsplit: int = - 1): string (s: string; sep: char; maxsplit: int = - 1): string (s: string; sep: string; maxsplit: int = - 1): string | 文字列を任意の文字(列)で分割したものを取得する | strutils |
rsplit | (s: string; seps: set[char] = Whitespace; maxsplit: int = - 1): seq[string] (s: string; sep: char; maxsplit: int = - 1): seq[string] (s: string; sep: string; maxsplit: int = - 1): seq[string] | 文字列を任意の文字(列)で分割したものを取得する(末尾から分割していく) | strutils |
[iterator] rsplit | (s: string; seps: set[char] = Whitespace; maxsplit: int = - 1): string (s: string; sep: char; maxsplit: int = - 1): string (s: string; sep: string; maxsplit: int = - 1; keepSeparators: bool = false): string | 文字列を任意の文字(列)で分割したものを取得する(末尾から分割していく) | strutils |
その他
プロシージャ | 引数:戻り値 | 説明 | モジュール |
---|---|---|---|
setLen | (s: var string; newlen: Natural) | 文字列の長さを変更 | system |
cstringArrayToSeq | (a: cstringArray; len: Natural): seq[string] (a: cstringArray): seq[string] | system | |
allocCStringArray | (a: openArray[string]): cstringArray | system | |
deallocCStringArray | (a: cstringArray) | system | |
shallow | (s: var string) | 代入時の動作を浅いコピーにする | system |
GC_ref | (x: string) | 参照カウントを増やす | system |
GC_unref | (x: string) | 参照カウントを減らす | system |
getRefcount | (x: string): int | 参照カウントを取得する | system |
リンク
- String Functions: Nim vs Python ❚ A Scripter's Notes : PythonとNimの文字列操作方法が比較されている