我正在尝试创建一个读取字符串的正则表达式,如果最后一个字符类似于!“£$%等,它会忽略最后一个字符,读取字符串(以允许我的代码查找它)一个字典类)然后输出字符串,结尾处的字符被忽略。这实际上是可能的,还是我必须删除最后一个字符?
到目前为止......
foreach(var line in yourReader)
{
var dict = new Dictionary<string,string>(); // your replacement dictionaries
foreach(var kvp in dict)
{
System.Text.RegularExpressions.Regex.Replace(line,"(\s|,|\.|:|\\t)" + kvp.Key + "(\s|,|\.|:|\\t)","\0" + kvp.Value + "\1");
}
}
我也被告知要尝试这个
var trans = textbox1.Text;
foreach (var kvp in d) //d is my dictionary so use yours
{
trans = trans.Replace(kvp.Key, kvp.Value);
}
textbox2.Text = trans;
但实际上不知道它做了什么
答案 0 :(得分:2)
我没有发现任何使用正则表达式的观点,所以我希望这会有所帮助:
const int ARRAY_OFFSET = 1;
List<char> ForbiddenChars = new List<char>()
{
'!', '@', '#', '$', '%', '^', '&', '*', '£' //Add more if you'd like
};
string myString = "Hello World!&";
foreach (var forbiddenChar in ForbiddenChars)
{
if (myString[myString.Length - ARRAY_OFFSET] == forbiddenChar)
{
myString = myString.Remove(myString.Length - ARRAY_OFFSET);
break;
}
}
修改强>
我检查了旧代码,但它遇到了一个问题:当字符串的最后一个“禁止”字符按ForbiddenChars
数组的顺序排列时,它删除了所有字符。如果你的字符串是“Hello World&amp;!”它会删除两个!和&amp ;.所以我设置了一个break;
,这将不再是一个问题。
答案 1 :(得分:1)
看看Regex.Replace。正则表达式(如[!"£$%]$
)应该可以满足您的需求。
答案 2 :(得分:0)
在你的情况下,我建议使用正则表达式表示一系列字符来删除!“££%etc。
您希望在您的案例中使用此方法的方式如下:
"<the bit you want to capture>(?:[!-%]\\r)"
(?:[!-%]\\r)
位匹配但不存储范围内的单个字符! - %就在回车符之前。
我还建议使用这个方便的表达式备忘单:
http://www.mikesdotnetting.com/Article/46/CSharp-Regular-Expressions-Cheat-Sheet