我使用正则表达式遇到了一些问题。你能帮帮我吗?以下是我试图解决的问题 -
输入 ::,...:D .. :: :))你今天好吗:P?..:(*
输出 :D :):P :(
基本上我想从输入字符串中删除标点和文本,如 - (。,:; etc),并用空字符串替换它们。但是我想保留表情符号 - :),:(或者:P。我已经编写了以下代码,但它无效。
Regex =“[A-Za-z] |:[D(P(]”
但它也删除了“:D和:P”smilie。
答案 0 :(得分:2)
以下正则表达式字符串应该适合您:
(((?<!:)[^:])|(:(?![PD\(\)])))[^:]*
它由两部分组成:
((?<!:)[^:])
| (:(?![PD\(\)]))
)[^:]*
第一部分是使用Negative Lookahead and Lookbehind的OR(|
)语句。它通过查找:
一个显然不是笑脸的角色:
(?<!:)
[^:]
或者没有笑脸字符的冒号:
:
(?![PD\(\)]))
第二部分([^:]*
)继续观察,直到我们发现潜在笑脸(冒号)的开始。
此正则表达式目前只找到以下表情符号:
您可以更新OR语句的后半部分以查找其他表情符号。
总结一下,这个正则表达式应该找到一些不是笑脸的东西。你可以简单地在Regex
变量中声明它,然后调用.Replace(string input, string replacement)
,传入你的输入字符串和想要用(String.Empty
在这种情况下替换非笑脸字符的字符串)
答案 1 :(得分:1)
不太完美的解决方案:
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");