我有一个由系统生成的CSV文件。问题出在其中一个字段,该字段过去是一个项目列表。以下是原始列表的一个示例...
The serial number of the desk is 45TYTU
This is the second item in the list
The colour of the apple is green
The ID code is 489RUI
This is the fourth item in the list.不幸的是,系统输出的代码如下……
The serial number of the desk is 45TYTUThis is the second item in the listThe colour of the apple is greenThe ID code is 489RUIThis is the fourth item in the list.正如您所看到的,它忽略了换行符,只是将所有内容捆绑在一起。我无法修改生成此输出的系统,因此我想要做的是想出某种regex查找和替换表达式来将它们分离出来。
我最初的想法是尝试检测大写字母在小写单词的中间,但在示例中的一项中,当使用序列号时,它会抛出这一点。
谁有什么建议?正则表达式是可行的吗?
-编辑
如果我忽略了以序列号结尾的行将暂时中断的事实,我认为我需要为自己简化一些事情。我只需要创建一个表达式,如果它检测到在小写字母之后使用了一个大写字母,它将插入一个换行符
- EDIT 2-使用fardjad给出的例子,对于给定的样本数据,所有的工作都是有效的。
(.(?=[A-Z][a-z]))现在,当我使用更多数据进行测试时,我可以看到出现了一个问题,某些行以数字开头,因此它将这些行视为序列号,您可以在http://regexr.com?2vfi5上看到此示例
只有大约10个已知的数字在线路的开头使用,如240v,120v等。
有没有办法排除这些?
发布于 2011-12-14 03:14:38
这不是一个健壮的解决方案,但这就是您所要求的。它匹配大写字母前跟小写字母的字符。您可以简单地使用正则表达式,替换并附加一个新行字符:
(.(?=[A-Z][a-z]))请参阅this演示。
发布于 2011-12-14 03:14:14
你可以搜索这个
(?<=\p{Ll})(?=\p{Lu})并替换为换行符。正则表达式匹配小写字母\p{Ll}和大写字母\p{Lu}之间的空格。
这里假设您使用的是支持Unicode的正则表达式引擎(例如.NET、PCRE、Perl )。如果不是这样的话,您可能还会逃脱
(?<=[a-z])(?=[A-Z])但这当然只检测到ASCII单词中的小写/大写变化。
https://stackoverflow.com/questions/8492301
复制相似问题