Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.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# Regex-仅当它有空格时从两侧查找_C#_Regex - Fatal编程技术网

C# Regex-仅当它有空格时从两侧查找

C# Regex-仅当它有空格时从两侧查找,c#,regex,C#,Regex,我需要一些关于正则表达式的帮助。我需要找到一个被任何元素包围的单词,例如-*。但我需要匹配它,只有当它在以太面上有空格或者没有空格的时候。例如,若它在文本的开头,那个么我在那个里就并没有空间了,结尾也是一样 这就是我的目的 string myString = "You will find *me*, and *me* also!"; string findString = @"(\*(.*?)\*)"; string foundText; MatchCollect

我需要一些关于正则表达式的帮助。我需要找到一个被任何元素包围的单词,例如-
*
。但我需要匹配它,只有当它在以太面上有空格或者没有空格的时候。例如,若它在文本的开头,那个么我在那个里就并没有空间了,结尾也是一样

这就是我的目的

    string myString = "You will find *me*, and *me* also!";
    string findString = @"(\*(.*?)\*)";
    string foundText;
    MatchCollection matchCollection = Regex.Matches(myString, findString);
    foreach (Match match in matchCollection)
    {
        foundText = match.Value.Replace("*", "");
        myString = myString.Replace(match.Value, "->" + foundText + "<-");
        match.NextMatch();
    }
    Console.WriteLine(myString);
string myString=“你会找到*me*,还有*me*!”;
字符串findString=@“(\*(.*?\*)”;
字符串文本;
MatchCollection MatchCollection=Regex.Matches(myString,findString);
foreach(匹配集合中的匹配)
{
foundText=match.Value.Replace(“*”,“”);

myString=myString.Replace(match.Value,“->”+foundText+”尝试以下模式:

string findString = @"(?<=\s|^)\*(.*?)\*(?=\s|$)";
当然,您需要根据需要扩展集合
[\s,]
。您可能希望添加
,至少:
[\s,!?。]
(不,
不需要在字符集中转义!)

编辑 一个小演示:

string Txt = "foo *m*e*, bar";
string Pattern = @"(?<=[\s,]|^)\*(.*?)\*(?=[\s,]|$)";
Console.WriteLine(Regex.Replace(Txt, Pattern, ">$1<"));
string Txt=“foo*m*e*,bar”;

字符串模式=@”(?$1尝试以下模式:

string findString = @"(?<=\s|^)\*(.*?)\*(?=\s|$)";
当然,您需要根据需要扩展集合
[\s,]
。您可能希望添加
,至少:
[\s,!?。]
(不,
不需要在字符集中转义!)

编辑 一个小演示:

string Txt = "foo *m*e*, bar";
string Pattern = @"(?<=[\s,]|^)\*(.*?)\*(?=[\s,]|$)";
Console.WriteLine(Regex.Replace(Txt, Pattern, ">$1<"));
string Txt=“foo*m*e*,bar”;
字符串模式=@”(?$1您可以在匹配项周围添加“行或空格开头”和“行或空格结尾”:

(^|\s)\*(.*?)\*(\s|$)
您现在需要参考中间的捕获组以获取匹配字符串。

您可以在匹配字符串周围添加“行或空格的开头”和“行或空格的结尾”:

(^|\s)\*(.*?)\*(\s|$)

您现在需要为匹配字符串引用中间捕获组。

您编写了“如果以太端有空格或没有空格”。但是这部分
*me*,
没有空格或没有空格。它有coma。还是我错了?您编写了“如果以太端有空格或没有空格”。但是这部分
*me*,
没有空格或没有空格东西。它有昏迷。或者我错了吗?谢谢,它工作得很好,Ruslan有一个正确的观点,谢谢你也修复了它。如果不太难的话,也许你可以再帮我做一件事。我如何转义字符?例如,m*e将显示为->m*eth,这实际上在原始字符串上有点错误。它将匹配
“*me*,和*me**“
作为捕获。我认为颠倒逻辑并使用
@”(?谢谢,它工作得很好,Ruslan也有一个正确的观点,谢谢你的修正。如果不太难的话,也许你可以帮我做一件事。我如何转义字符?例如,m*e将显示为->m*eth这实际上是原始字符串上的一个小错误。它将匹配
“*me*,和*me**“
作为它的捕获。我认为颠倒逻辑并使用
@”(?