c#正则表达式问题
我在处理c#正则表达式问题,c#,regex,twitter,C#,Regex,Twitter,我在处理Regex中的@symbol时遇到问题,我正在尝试删除@sometext 从文本字符串中,似乎找不到它使用@作为文本的任何地方。我自己试过了,但没有从字符串中删除这个词。有什么想法吗 public string removeAtSymbol(string input) { Regex findWords = new Regex(______);//Find the words like "@text" Regex[] removeWords; string te
Regex
中的@symbol时遇到问题,我正在尝试删除@sometext
从文本字符串中,似乎找不到它使用@作为文本的任何地方。我自己试过了,但没有从字符串中删除这个词。有什么想法吗
public string removeAtSymbol(string input)
{
Regex findWords = new Regex(______);//Find the words like "@text"
Regex[] removeWords;
string test = input;
MatchCollection all = findWords.Matches(test);
removeWords = new Regex[all.Count];
int index = 0;
string[] values = new string[all.Count];
YesOutputBox.Text = " you got here";
foreach (Match m in all) //List all the words
{
values[index] = m.Value.Trim();
index++;
YesOutputBox.Text = YesOutputBox.Text + " " + m.Value;
}
for (int i = 0; i < removeWords.Length; i++)
{
removeWords[i] = new Regex(" " + values[i]);
// If the words appears more than one time
if (removeWords[i].Matches(test).Count > 1)
{
removeWords[i] = new Regex(" " + values[i] + " ");
test = removeWords[i].Replace(test, " "); //Remove the first word.
}
}
return test;
}
public string removetsymbol(字符串输入)
{
Regex findWords=new Regex(________;);//查找像“@text”这样的单词
正则表达式[]移除单词;
字符串测试=输入;
MatchCollection all=findWords.Matches(测试);
removeWords=newregex[all.Count];
int指数=0;
字符串[]值=新字符串[all.Count];
YesOutputBox.Text=“你来了”;
foreach(全部匹配m)//列出所有单词
{
值[索引]=m.Value.Trim();
索引++;
YesOutputBox.Text=YesOutputBox.Text+“”+m.值;
}
for(int i=0;i1)
{
removeWords[i]=新正则表达式(“+values[i]+”);
test=removeWords[i]。替换(test,“”;//删除第一个单词。
}
}
回归试验;
}
您可以使用:
^\s@([A-Za-z0-9_]+)
作为识别Twitter用户名的正则表达式。您可以通过以下方法从string
test
中删除所有出现的“@sometext”
Regex.Replace(test, "@sometext", "")
或者对于任何以“@”开头的单词,您可以使用
Regex.Replace(test, "@\\w+", "")
如果您特别需要在tom@comp.com
)您可以在正则表达式前面加上一个特殊的字边界(\b
在这里不起作用):
正则表达式从这个字符串中删除@something:我想从这个字符串中删除@something
var regex = new Regex("@\\w*");
string result = regex.Replace(stringWithAt, "");
这就是你要找的吗 我很幸运地应用了这个模式:
\B@\w+
这将匹配以包含字母数字字符的@字符开始的任何字符串,以及一些链接标点,如下划线字符,如果它不出现在字母数字字符和非字母数字字符之间的边界上
执行此代码的结果:
string result = Regex.Replace(
@"@This1 @That2_thing this2@3that @the5Others @alpha@beta@gamma",
@"\B@\w+",
@"redacted");
是以下字符串:
redacted redacted this2@3that redacted redacted@beta@gamma
如果这个问题是特定于Twitter的,那么Twitter提供了一个可以帮助捕获特定于Twitter的实体,如链接、提及和hashtag。包含定义Twitter使用的正则表达式的代码,并包含测试字符串和在Twitter库中执行正则表达式的许多单元测试的预期结果 Twitter的提及匹配模式(从其库中提取,修改以删除不必要的捕获组,并进行编辑以在替换上下文中有意义)如下所示。匹配应以不区分大小写的方式执行
(^ |[^a-z0-9][@\uFF20][a-z0-9][1,20}
下面是一个例子,它再现了我的答案中第一次替换的结果:
string result = Regex.Replace(
@"@This1 @That2_thing this2@3that @the5Others @alpha@beta@gamma",
@"(^|[^a-z0-9_])[@\uFF20][a-z0-9_]{1,20}",
@"$1redacted",
RegexOptions.IgnoreCase);
请注意,由于第一个捕获组不能直接转换为原子零宽度断言,因此需要包含替换
$1
。您确定其余代码可以正常工作吗?您使用的正则表达式是什么?@应该可用作文本。首先在此处测试您的正则表达式:如果它有效…然后测试您的代码…您是否尝试匹配twitter用户名或任何具有@
的内容,包括电子邮件?该正则表达式也将匹配someemail@example.com
string result = Regex.Replace(
@"@This1 @That2_thing this2@3that @the5Others @alpha@beta@gamma",
@"(^|[^a-z0-9_])[@\uFF20][a-z0-9_]{1,20}",
@"$1redacted",
RegexOptions.IgnoreCase);