乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 117|回复: 8

需要帮助解析字符串吗

[复制链接]

51

主题

613

帖子

9

银币

中流砥柱

Rank: 25

铜币
815
发表于 2015-4-13 12:42:35 | 显示全部楼层 |阅读模式
我正在处理一堆数据,其中一个字段是这样的格式:
ABCxxXxxABCjklMZ
或者基本上,前三个字符总是字符串,然后接下来的一个、两个或可能三个字符将是从0到9的整数,然后是大写的X,后跟一个、两个或三个从0到9的整数。在字符串的这一点上,我想丢弃最后一个整数左边的所有内容,获取它右边的所有内容。我很确定我可以用一些代码做到这一点,但这看起来可能是正则表达式的好时机。不太熟悉他们,我希望在这里得到一些建议。
有时用户可能会将大写字母X放入前三个字符中的一个,因此如果我在整数集之间键入大写字母X,我必须考虑到这一点。但大多数情况下,大写X只会出现在整数集之间,每个整数集可能包含1到3个数字。并且一组不会总是与另一组长度相同。

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

23

主题

239

帖子

6

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
327
发表于 2015-4-13 13:00:23 | 显示全部楼层

  1. /[A-Z]\D+$/ig

潜在的?
应该匹配
ABC 11 x 11  ABCjklMZ
回复

使用道具 举报

51

主题

613

帖子

9

银币

中流砥柱

Rank: 25

铜币
815
发表于 2015-4-13 17:53:50 | 显示全部楼层
如果我正确阅读并且不想使用regex那么可以链接一些字符串函数,这是一个简单的控制台程序,它有一个单行程序和一个逐步由函数单行程序String.Concat(input.Substring(input.IndexOf('X',3)+1)。跳过(Char.IsNumber));。
带有分步函数的单行函数。
类程序。
{。
静态无效主(字符串[]参数)。
{。
string[]输入=new[]{"XxC12X6ABCjkMZ","ABC12X21ABCjkMZ","XXX1X21ABCjkMZ"};。


Foreach(输入中的var输入)。
{。
Console.WriteLine(ParseField(输入));。
}。


Foreach(输入中的var输入)。
{。
ParseFieldbyBox(输入);。
}。
Console.ReadKey();。


}。


静态字符串ParseField(字符串输入)。
{。
返回String.Concat(input.Substring(input.IndexOf('X',3)+1)。
}。



静态空格ParseFieldbystep(字符串输入)。
{。
Console.WriteLine();。
Console.WriteLine(输入);。
var RemoveFirst3chars=input.Substring(3);。
Console.WriteLine(RemoveFirst3chars + " - 删除前3个字符");。


var indexOfFirstX=removeFirst3chars.IndexOf('X');。
Console.WriteLine(indexOfFirstX + " = 的第一个X在 \"" + 的索引First3chars +"\"");。


var indexAfterFirstX=indexOfFirstX+1;。
var stringAfterFirstX=removeFirst3chars.Substring(indexAfterFirstX);。
Console.WriteLine(stringAfterFirstX + " - X"后的字符串);。

int numberIndex=0;。
同时(Char.IsNumber(stringAfterFirstX[numberIndex])。
{。
Console.WriteLine(stringAfterFirstX[numberIndex] + " - 是一个数字");。
numberIndex++;。
}。


Console.WriteLine(stringAfterFirstX[numberIndex] + " - first non-number");。


var结果=stringAfterFirstX.Substring(numberIndex);。
Console.WriteLine("结果 = " + 结果);。
}。


}。

回复

使用道具 举报

23

主题

239

帖子

6

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
327
发表于 2015-4-13 22:13:25 | 显示全部楼层
字符串结果字符串=null;。
尝试{。
puttString=Regex.Replace(subjectString, @"(?:.*)(\d)(?!.*\d)(.*)", "$12美元",RegexOptions.IgnoreCase|RegexOptions.Multiline);。
}捕捉(参数异常ex){。
//正则表达式中的语法错误。
}你想抓取最后一个整数吗?如果是,请保留替换中的1美元,否则您的替换是2美元。请参阅屏幕截图以获取解释,这是http://www.regexbuddy.com/的,并且物有所值。另请参阅http://www.regexbuddy.com/regexmagic.html编辑:yay regex,当然我在第一次尝试时就弄错了。此外,在AutoCAD中添加了一个测试(不,您以前没有见过那个插件)moar编辑:这可能是一个更清晰的解释(RegexBuddy生成了这个)...@"。
(?: # 匹配下面的正则表达式。
,#匹配任何不是换行符的单个字符(换行符)。
*#在零和无限次之间,尽可能多的次数,根据需要回馈(贪婪)。
)。
(#匹配下面的正则表达式并将其匹配捕获到反向引用编号1中。
\d#匹配一个数字的单个字符(任何Unicode脚本中的任何十进制数)。
)。
(?! # 断言从这个位置开始不可能匹配下面的正则表达式(负前瞻)。
,#匹配任何不是换行符的单个字符(换行符)。
*#在零和无限次之间,尽可能多的次数,根据需要回馈(贪婪)。
\d#匹配一个数字的单个字符(任何Unicode脚本中的任何十进制数)。
)。
(#匹配下面的正则表达式并将其匹配捕获到反向引用编号2。
,#匹配任何不是换行符的单个字符(换行符)。
*#在零和无限次之间,尽可能多的次数,根据需要回馈(贪婪)。
)。
"。

回复

使用道具 举报

13

主题

117

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
173
发表于 2015-4-17 07:49:17 | 显示全部楼层
谢了。你们太棒了。这周我读了很多关于正则表达式的东西,这真的很酷。
回复

使用道具 举报

23

主题

239

帖子

6

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
327
发表于 2015-4-17 07:57:24 | 显示全部楼层
我只是不懂正则表达式,但这个网站http://www.regexr.com/这在很大程度上帮助我弄清楚了每个人
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2015-4-19 08:48:50 | 显示全部楼层
仅供参考,不同的正则表达式引擎之间存在差异,即使用Javascript解析器,.NET引擎在一些地方略有不同。http://www.regular-expressions.info/ 是编写RegexBuddy的人的一个很棒的网站。http://stackoverflow.com/questions/22937618/reference-what-does-this-regex-mean/22944075#22944075 拥有的信息比您可能阅读的要多。
回复

使用道具 举报

23

主题

239

帖子

6

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
327
发表于 2015-4-28 06:12:20 | 显示全部楼层

heheh,更多信息...http://blog.codinghorror.com/regular-expressions-now-you-have-two-problems/
BTW,它远不止2-http://blog.codinghorror.com/regex-performance/和http://www.regular-expressions.info/catastrophic.html
TLDR;一个糟糕的正则表达式需要天来计算是完全可行的。因此。
。NET 4.5有一个超时属性。不要让它吓到你,我发现它们很快,我仍然有我所有的手指。
回复

使用道具 举报

23

主题

239

帖子

6

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
327
发表于 2015-6-26 12:29:11 | 显示全部楼层
免责声明:这是我能找到的最新相关帖子
只是想分享这个网站,它在几秒钟内就产生了一个可用的正则表达式“match”方法-强烈推荐

http://txt2re.com/index-csharp.php3
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-4-30 04:07 , Processed in 0.809717 second(s), 81 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表