新人求助,忘指点,急急急

qq_42666173 2018-07-11 10:57:27
是这样的,有个问题请教下各位,C#怎么将字符串str1里小括号内的 and 去除而不影响括号外的,还有个问题,如何将括号内的只保留一个C,其他不影响, 想得到这样的结果str2=“A NE 'B and (C NE 'D' ) and E NE 'F' ”,ABCD这些都是不固定的字符串。
str1=“A NE 'B and (C NE 'D' and C NE 'D' and C NE 'D') and E NE 'F' ”,感谢!
...全文
692 点赞 收藏 22
写回复
22 条回复
XBodhi. 2018年07月13日
正则替换。

Regex.Replace 方法
回复 点赞
CallstarMrZ 2018年07月13日
// 菜鸟做法,仅供参考

const string childAnd = "and";
const string myString = "A NE 'B and (C NE 'D' and C NE 'D' and C NE 'D') and E NE 'F' ";
// 取子字符串
var i = myString.IndexOf('(');
var j = myString.IndexOf(')');
var childStr = myString.Substring(i, j - i + 1);
// 去重
var andIndex = childStr.IndexOf(childAnd);
var newString = childStr.Remove(andIndex, j - i - andIndex);
// 替换
var ret = myString.Replace(childStr, ne[/align]wString);
回复 点赞
正怒月神 2018年07月13日
用正则表达式就可以了啊
回复 点赞
sj13483162817 2018年07月13日
用正则表达式就可以了啊
回复 点赞
SeaHome81 2018年07月13日
1、括号里去and:
string str="A NE 'B and (C NE 'D' and C NE 'D' and C NE 'D') and E NE 'F'";
string str2=Regex.Replace(str, "(?<=\\(.*)\\s[aA][nN][dD]\\s(?=.*\\))", " ");
2、括号里去重:
string str0="C NE D C NE F C NE G";
string str1=string.Empty;
str0.Split(' ').Distinct().ToList().ForEach(s => str1+=" "+s);

回复 点赞
weixin_42685241 2018年07月13日
用正则表达式比较简单
回复 点赞
以专业开发人员为伍 2018年07月12日
你起码要考虑到

1. and 有可能大写字母
2. 字符串常量中可能包含 and 这样的字符
3. 圆括号可能多层嵌套

等等的基本语法问题。如果只是简单匹配字眼儿,终归是只能解决最初的一点点小case,不能作为一个产品方案。
回复 点赞
MichaelGLX 2018年07月12日
string str1 = "A NE 'B and (C NE 'D' and C NE 'D' and C NE 'D') and E NE 'F' ";

string[] sArray = str1.Split(new char[] { '(', ')' });
string strCut = sArray[1];
string[] sArrayCut = strCut.Split(new char[] { ' ' });
List<string> strList = new List<string>();
foreach (string str in sArrayCut)
{
if (strList.IndexOf(str) < 0 && str != "and")
strList.Add(str);
}
string strc = "(";
for (int i = 0; i < strList.Count-1; i++)
{
strc += (strList[i] + " ");
}
strc += strList[strList.Count - 1] + ")";

string str2 = sArray[0] + strc + sArray[2];
Console.WriteLine(str2);
Console.ReadKey();
回复 点赞
qq_42666173 2018年07月12日
请问怎么只对字符串中括号里的内容去重呢,比如 str= A and D(C NE D C NE F C NE G),括号里的部分去重得到 A and D(C NE D F G),去重的代码
回复 点赞
足球中国 2018年07月12日
编译器课程的简单的词法分析。
回复 点赞
qq_42666173 2018年07月12日
谢谢 MichaelGLX大哥的回答。你的代码应该是可以的,我也想看看有没有别的更简单的方式
回复 点赞
qq_42666173 2018年07月12日
谢谢mirror030你的意见,我确实说的比较乱,你的理解是对的。就是字符串外面有类似and这样的连接词,然后括号里的字符串有好几块,格式比较类似,如:A NE B and A NE C 。。。每块直接也用and这样的连接词,和括号外是一致的,但第一主语都是A,我的问题主要包含两个,一个是怎么只去除括号内的and 连接词,外面不受影响; 二是 对括号里的字符串的块去重,保留不重复的,如果可以期望能给完整的实例代码,我是新手哈,理解起来比较慢,谢谢!
回复 点赞
mirrorspace 2018年07月12日
重要的是字符串的规则,你讲的越清楚,越能得到解决办法
从给出的示例来看.规则就是 按字母顺序 A NE 'B' 是一个单元 ,如果有多个,放括号中重复.并且作为一个单元.单元之间使用 and 连起
要求是去除重复的单元,类似于去重问题,括号中的重复去掉保存一个,但是括号要保留
str1=“A NE 'B' and (C NE 'D' and C NE 'D' and C NE 'D') and E NE 'F' ”
所以需要更清楚的规则说明


回复 点赞
XiaoYi96 2018年07月11日
以 ()分割,得到括号内的。然后将得到的值以and分割,最后拼起来。
回复 点赞
qq_42666173 2018年07月11日
wskicfuu大哥,你给的 “Regex.Replace("a and b and c (a and b and c) and d and e","(?<=\\([\\w\\s]+\\s+)and?(?=\\s+[\\w\\s]+\\))","an") 将括号内的and替换成an ” 的确可以将括号里的and全部替换,还想请问下,怎么只对括号里的字符串去重呢,而不影响整个字符串?
回复 点赞
wskicfuu 2018年07月11日
Regex.Replace("a and b (a and b a and b a and b) a and b","(?<=[\\(\\s]+)a and b?(?=[\\s\\)])","#")
将括号内的所有a and b替换成#,然后再自己把###替换成a and b吧
你给的输入字符串太模糊了
回复 点赞
wskicfuu 2018年07月11日
Regex.Replace("a and b and c (a and b and c) and d and e","(?<=\\([\\w\\s]+\\s+)and?(?=\\s+[\\w\\s]+\\))","an")
将括号内的and替换成an
回复 点赞
qq_42666173 2018年07月11日
mirror030大哥你的代码能写的完整点吗,我是新手看不懂,麻烦详细点可以吗
回复 点赞
qq_42666173 2018年07月11日
可以用string分割吗。上面list 总是有错误
回复 点赞
mirrorspace 2018年07月11日

// 好奇怪的需求
str1=“A NE 'B and (C NE 'D' and C NE 'D' and C NE 'D') and E NE 'F' ”
list = str1.split('and')
newlist
foreach(item in list)
{
newitem=item;
if(item.trim().startwidth('('))
newitem=item.trim('(',')').split('and')[0];
newlist.add(newitem)
}
string.join(' and ',newlist.toarray())
回复 点赞
发动态
发帖子
C#
创建于2007-09-28

8.4w+

社区成员

64.0w+

社区内容

.NET技术 C#
社区公告
暂无公告