お世話になっております。
###前提・実現したいこと
SHIFJIS以外の文字列を検索し、該当の文字列を削除したい。
###発生している問題・エラーメッセージ
エラーは特に出ていません
###該当のソースコード
C#
1 public static bool JudgeSJIS(int id, string s, out string rtnst) { 2 //ひらがな 3 string pattern = @"\p{IsHiragana}"; 4 //カタカナ 5 pattern += @"|[\p{IsKatakana}\u31F0-\u31FF\u3099-\u309C\uFF65-\uFF9F]"; 6 //漢字 7 pattern += @"|[\p{IsCJKUnifiedIdeographs}" + 8 @"\p{IsCJKCompatibilityIdeographs}" + 9 @"\p{IsCJKUnifiedIdeographsExtensionA}]|" + 10 @"[\uD840-\uD869][\uDC00-\uDFFF]|\uD869[\uDC00-\uDEDF]"; 11 //数字 12 pattern += @"|[0-90-9]"; 13 //英字 14 pattern += @"|[a-zA-Z]|[a-zA-Z]"; 15 //スペース 16 pattern += "|[ , ]"; 17 //記号 18 pattern += "|[\\!\\\"\\#\\$\\%\\&\\'\\(\\)\\*\\+\\,\\-\\.\\/\\:\\;\\<\\=\\>\\?\\@\\[\\]]"; 19 pattern += "|[々.・”:;/-()<>、。~←↑→↓〈〉《》「」‘’“”[]{}{}【】]"; 20 pattern += "|[◆■◇□※★☆#%!×÷+-]"; 21 pattern += "|[、]"; 22 pattern += "|[┏┛┗┓┌┘└┐]"; 23 pattern += "|[㎜]"; 24 pattern += "|[ⅠⅡ]"; 25 pattern += "|[㍻℡]"; 26 pattern += "|[〔〕]"; 27 //正規表現でSJIS以外を抽出 28 string tmps = Regex.Replace(s,pattern,""); 29 if ( tmps.Length == 0 ) { 30 rtnst = s; 31 return true; 32 } else if ( tmps.Length == 1 ) { 33 rtnst = s.Replace(tmps, ""); 34 return true; 35 } else { 36 //SJIS 文字以外が存在する。 37 rtnst = string.Empty; 38 return false; 39 } 40 } 41 42
###試したこと
[](string sに入ってくる文字列)
stringのsには写真の文字列が入ってきます。
DO,MOを抽出したいのです。
最後のif文でtmpsの長さが1であれば変更でそれ以外は空文字で返すというプログラムなってますが、
実際にはshiftjis以外の文字列が複数入ってる可能性もありました。
なので、条件式を変えて
else if ( tmps.Length >= 1 ){ rtnst = s.Replace(tmps, ""); }
に変えてshifjis以外の文字列を削除したのですが、rtnstに写真と同じ文字列が代入されます。
string tmps = Regex.Replace(s,pattern,"");
この部分でshiftjis以外の文字列を抽出しているので、その文字列だけを削除したいのでreplaceしたのですが、うまく行きませんでした。
なにか考え方が間違っていますでしょうか?
ご教授よろしくお願いします。
###補足情報(言語/FW/ツール等のバージョンなど)
windows8.1
.net framework3.5
C#

回答2件
あなたの回答
tips
プレビュー