Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#正则表达式问题_C#_Regex_Twitter - Fatal编程技术网

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);