我有一个基本上包含以下行的CSV:
06444|WidgetAdapter 6444|Description:
Here is a description.
Maybe some more.
|0
第三个字段中的文字总是不同且不同,我试图仅用<br>
替换其中的所有换行符,因此它最终为
06444|WidgetAdapter 6444|Description: <br>Here is a description.<br>Maybe some more.<br>|0
编辑:
我基本上需要摆脱所有的换行符,所以每一行都是正确的VALUE | VALUE | VALUE | VALUE。标准化/美化/清洁它。
我的所有工具都无法正确导入,phpMyAdmin chokes等。 字段内有换行符,有双重引号未转义等等。
其他字段示例:
08681|Book 08681|"Testimonial" - Person
You should buy this.|
另一个字段的示例:
39338|Itemizer||
答案 0 :(得分:1)
如果您知道有4列,则可以轻松解析数据。例如,这是一个PHP行,它产生一个包含所有数据的数组。数组中的每一行都是另一个包含所有捕获组的数组:[0]
包含完整匹配,[1]
- [4]
包含每列:
$pattern = '/^([^|]*)\|([^|]*)\|([^|]*)\|([^|]*)$/m';
preg_match_all($pattern, $data, $matches, PREG_SET_ORDER);
模式非常简单:它需要4个值(不是管道符号),由3个管道分隔。获得数据后,您可以轻松地按照自己的方式重建数据,例如使用nl2br
请注意,如果第一列和最后一列也包含新行,则无法可靠地解析数据。
答案 1 :(得分:1)
如果需要,可以使用正则表达式来定位这些换行符。我们的想法是只查找后跟一个额外值的换行符,然后只查找整行。我们可以在当前换行符为1模4后检查值的数量,因此我们知道我们在第3列:
(?:\r\n?|\n)(?=[^|]*\|[^\n\r|]*\s*(?:^(?:[^|]*\|){3}[^\n\r|]*$\s*)*\Z)
或者,(某些)解释:
(?:\r\n?|\n) # Match a newline
(?= # that is before...
[^|]*\|[^\n\r|]*\s* # one more separator and value
(?:^(?:[^|]*\|){3}[^\n\r|]*$\s*)* # and some lines with 4 values.
\Z # until the end of the string.
)
我无法在Notepad ++上工作(它甚至不匹配[\r\n]
),但它似乎在其他引擎上运行良好: