我有一个值,我将其拉入一个看起来像这样的字符串:
M'arta
我需要让它将数值转换为实际值,以便字符串如下所示:
M'arta
有关如何在VB.NET中实现此目的的任何想法?以下是返回此结果的相关代码行:
Dim occupant as String = GridView1.Rows(e.RowIndex).Cells(2).Text
答案 0 :(得分:3)
您可以解析查找#digits的字符串,然后将找到的代码放入ChrW .NET函数中。
答案 1 :(得分:3)
以下是您要问的VB(&amp; C#)版本。基本上,使用Regex方法中的MatchEvaluator参数来允许自定义解析匹配项。在这种情况下,我们发现#<1-3_digit_number>
的任何实例都要删除`#符号,并转换十进制代码。
我在您的字符串(#116
)中添加了第二次转换,仅用于测试目的。您可以将其重构为自定义方法并且(不确定VB是否具有它)lambda表达式使其具有通用性,但我会将其留给您。
Imports System.Text.RegularExpressions
Public Class Test
Public Shared Sub Main()
Dim sample As [String] = "M#39ar#116a"
Dim reg As New Regex("\x23\d{1,3}")
Console.WriteLine(reg.Replace(sample, New MatchEvaluator(AddressOf ReplaceASCIICode)))
End Sub
Public Shared Function ReplaceASCIICode(m As Match) As [String]
Dim code As Int32 = Int32.Parse(m.Value.Substring(1))
Return Convert.ToString(ChrW(code))
End Function
End Class
using System;
using System.Text.RegularExpressions;
public class Test
{
public static void Main()
{
String sample = "M#39ar#116a";
Regex reg = new Regex(@"\x23\d{1,3}");
Console.WriteLine(reg.Replace(sample, new MatchEvaluator(ReplaceASCIICode)));
}
public static String ReplaceASCIICode(Match m)
{
Int32 code = Int32.Parse(m.Value.Substring(1));
return Convert.ToString((char)code);
}
}
出于存档目的,以下是支持&#___;
的版本:
Imports System.Text.RegularExpressions
Public Class Test
Public Shared Sub Main()
Dim sample As [String] = "M'arta"
Dim reg As New Regex("&#(\d{1,3});")
Console.WriteLine(reg.Replace(sample, New MatchEvaluator(AddressOf ReplaceASCIICode)))
End Sub
Public Shared Function ReplaceASCIICode(m As Match) As [String]
Dim code As Int32 = Int32.Parse(m.Groups(1).Value)
Return Convert.ToString(ChrW(code))
End Function
End Class
using System;
using System.Text.RegularExpressions;
public class Test
{
public static void Main()
{
String sample = "M'arta";
Regex reg = new Regex(@"&#(\d{1,3});");
Console.WriteLine(reg.Replace(sample, new MatchEvaluator(ReplaceASCIICode)));
}
public static String ReplaceASCIICode(Match m)
{
Int32 code = Int32.Parse(m.Groups[1].Value);
return Convert.ToString((char)code);
}
}
答案 2 :(得分:1)
我不知道VB.NET,但这是一个C#解决方案。我很确定你可以处理转换为Visual Basic。
using System;
using System.Text.RegularExpressions;
class Program {
static void Main(string[] args) {
String input = "M#39arta";
String output = Regex.Replace(input, @"#\d\d", Replace);
Console.WriteLine(output);
Console.ReadLine();
}
static String Replace(Match match) {
int charCode = int.Parse(match.Value.Substring(1));
return ""+ (char)charCode;
}
}
答案 3 :(得分:1)
如果你不知道正则表达式那么类似
Dim idx As Integer = occupant.IndexOf("#")
If idx <> -1 Then
idx += 1
Do While idx < occupant.Length
If IsNumeric(occupant(idx)) Then
s &= occupant(idx)
Else
Exit Do
End If
idx += 1
Loop
If s.Length > 0 Then
s = Convert.ToChar(CInt(s))
End If
Stop
End If
需要稍加修改才能处理#。
的多个实例