在我正在处理的程序中,我需要在字符串的某些部分周围剥离标记,然后在标记内的每个字符后面插入逗号(而不是在字符串中的任何其他字符之后)。如果这没有意义,这里有一个需要发生的事情的例子 -
这是一个带<的字符串。 a>标签< / a> (请忽略标签内的空格)
(需要成为)
这是一个带有t,a,g,。
的字符串任何人都可以帮我吗?我已经设法使用RegEx剥离标记,但我无法弄清楚如何只在标记中包含的字符之后插入逗号。如果有人可以提供帮助那就太棒了。
@Dour High Arch我会详细说明一下。该代码适用于无法识别SSML标记的文本转语音应用。当用户输入文本到语音应用的消息时,他们可以选择将单词括在< a>标签让演讲者称世界为首字母缩略词。因为首字母缩略词SSML标记不起作用,我想删除< a>每当存在时标记,并在标记中包含的每个字符后面放置逗号来伪造它(例如:< a> test< / a>变为t,e,s,t,)。字符串中所有未标记的单词后面都不需要逗号,只需要包含在标记中的逗号(如果需要,请参阅我的第一个示例)。
答案 0 :(得分:2)
如果你已经找到了正则表达式,我会想象捕获标签的内部文本会很简单。然后插入逗号是一个非常简单的操作:
var commaString = string.Join(",", capturedString.ToList());
答案 1 :(得分:1)
假设您已经通过RegEx解析了目标字符串,即周围没有标签......
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication32
{
class Program
{
static void Main(string[] args)
{
// setup a test string
string stringToProcess = "Test";
// actual solution here
string result = String.Concat(stringToProcess.Select(c => c + ","));
// results: T,e,s,t,
Console.WriteLine(result);
}
}
}
答案 2 :(得分:0)
解析XML是非常有问题的,因为您可能必须处理诸如CDATA部分,嵌套元素,实体,代理字符以及on和on之类的内容。我会使用像ANTLR这样的基于状态的解析器。
但是,如果您刚开始使用C#,使用内置的.Net字符串和数组类来解决这个问题是有益的。不需要ANTLR,LINQ或正则表达式:
using System;
class ReplaceAContentsWithCommaSeparatedChars
{
static readonly string acroStartTag = "<a>";
static readonly string acroEndTag = "</a>";
static void Main(string[] args)
{
string s = "Alpha <a>Beta</a> Gamma <a>Delta</a>";
while (true)
{
int start = s.IndexOf(acroStartTag);
if (start < 0)
break;
int end = s.IndexOf(acroEndTag, start + acroStartTag.Length);
if (end < 0)
end = s.Length;
string contents = s.Substring(start + acroStartTag.Length, end - start - acroStartTag.Length);
string[] chars = Array.ConvertAll<char, string>(contents.ToCharArray(), c => c.ToString());
s = s.Substring(0, start)
+ string.Join(",", chars)
+ s.Substring(end + acroEndTag.Length);
}
Console.WriteLine(s);
}
}
请注意,这并不涉及我提到的任何问题。但是,其他建议都没有。