은 유무 :교체
"a__b_c_____d__e_f__"
필요 :
"a_b_c_d_e_f_"
즉 :
"_"
(단일 밑줄)로 모든
"___"
문자열 (1 개 이상 밑줄) 교체 루프없이
을.
은 유무 :교체
"a__b_c_____d__e_f__"
필요 :
"a_b_c_d_e_f_"
즉 :
"_"
(단일 밑줄)로 모든
"___"
문자열 (1 개 이상 밑줄) 교체 루프없이
을.
정규 표현식을 사용하십시오.
var input = "a__b_c_____d__e_f__";
var output = Regex.Replace(input, "_+", "_");
+1, 나는 [이 답변] (http://stackoverflow.com/a/206946/416627)과 동일한 제안 된 수정 사항을 링크하려고했습니다. –
시작해야합니다.
cat file | perl -e "s/\_+/\_/g"
bash 명령입니까? C# 코드가 필요합니다. –
그건 C#처럼 보이지 않습니다 ... ... –
+1 .. 똑같은 정규 표현식이기 때문에 포스터가 생각을 계속할 것을 제안합니다. 아마도 코멘트 일뿐입니다. –
문제를 해결하는 이동하는 방법에는 여러 가지가 있습니다
string str = "a__b_c_____d__e_f__";
string newStr = System.Text.RegularExpressions.Regex.Replace(str, "_{2,}", "_");
var cleanString = Regex.Replace("a__b_c_____d__e_f__", "(_)+", "$1");
를 따라 같이 RegularExpressions를 사용하여이를 달성 할 수있는,하지만 난 당신이없이 "무슨 뜻인지 좀 확실 해요
while (myString.contains("__"))
myString.replace("__", "_");
:
분명히
하면 다음과 같은 루프를 사용할 수 있습니다 ... "루프
나는 이것이 당신이 피하려고 노력한다고 말한 것 같지만 ... 어딘가에 루프를 포함하지 않는 해결책이 있다고 생각하지 않는다. .contains 메소드와 .replace 메소드는 구현시 루프를 사용합니다. 명확히하기 위해 다음 코드도 사용할 수 있습니다.
string outputStr = "";
bool underscore = false;
for(int i = 0; i < myString.length; ++i)
{
if (myString[i] == '_')
{
if (underscore == false)
outputStr += myString[i];
underscore = true;
}else outputStr += myString[i];
}
여기서 알 수있는 것처럼 하나의 루프 만 사용합니다. 이것이 더 효율적이지만 (효율성이 문제라면 outputStr 변수에 문자열 대신 StringBuilder를 사용하는 것이 좋습니다) 요점은 문자열을 살펴볼 필요가 있다는 것입니다. 루프를 작성하는 사람이든, 아니면 자신을 대신해 다른 방법을 호출하는지 여부와 관계없이 루프를 사용하십시오.
숙제와 같은 소리가납니다. 재귀를 생각하십시오. –
나는 정말 좋은 해결책을 모른다. 그래서 물었습니다. 어쩌면 regexp ... –
가능한 중복 : [어떻게 C#에서 단일 공백으로 여러 공백을 대체합니까?] (http://stackoverflow.com/q/206717/416627) –