我在使用正则表达式时遇到了一些问题。你能帮帮我吗?以下是我想要解决的问题-
输入::,.:d.:)您今天过得如何? 输出 :D :) :P :(
基本上,我希望删除输入字符串中的标点符号和文本,如-(.,:;等),并将它们替换为空字符串。但是我想保留笑脸-:),:(或:P .I已经编写了以下代码,但它不起作用。
Regex=“A_x:d(P
但它也删除了":D和:P“笑脸。
发布于 2013-04-16 04:45:19
下面的regex字符串应该适用于您:
(((?<!:)[^:])|(:(?![PD\(\)])))[^:]*
它由两部分组成:
((?<!:)[^:])
= (:(?![PD\(\)]))
)[^:]*
第一部分是使用|
的OR ( 消极向前看和后看 )语句。它查找不包含笑脸的文本块中的第一个字符,方法是:
一个明显不在微笑中的角色:
(?<!:)
[^:]
或者一个冒号后面没有一个微笑字符:
:
(?![PD\(\)]))
。第二部分([^:]*
)继续寻找,直到我们找到一个潜在的微笑(一个冒号)的开始。
此Regex目前只找到以下微笑:
您可以更新OR语句的下半部分以找到其他的笑脸。
总之,这个Regex应该找到所有不是微笑的部分。您可以简单地在Regex
变量中声明它,然后调用.Replace(string input, string replacement)
,传入输入字符串和要用(本例中为String.Empty
)替换非微笑字符的字符串。
发布于 2013-04-15 11:54:57
不是很完美的解决方案:
string text = ":,... :D..:::))How are you today :P?..:(*";
text = text.Replace(":)", "@@@)");
text = text.Replace(":D", "@@@D");
text = text.Replace(":P", "@@@P");
// clean up your punctuation marks here
//
text = text.Replace("@@@)", ":)");
text = text.Replace("@@@D", ":D");
text = text.Replace("@@@P", ":P");
https://stackoverflow.com/questions/16023551
复制相似问题