请教字符串分割问题

qq_18889079 2016-12-17 01:04:51
大家好中午好,VB.NET新手,现在有一个文本文档,里面的数据如下:
CHORD WID 374.613 373.047 1.566 1.900 -1.900 --------*
MAX THICK 105.805 106.010 -0.205 1.900 -1.900 ----*----
CV CONT MIN -1.278 0.000 -1.278 1.900 -1.900 -*-------
CV CONT MAX 0.748 0.000 0.748 1.900 -1.900 ------*--
CC CONT MIN -0.339 0.000 -0.339 1.900 -1.900 ---*-----
CC CONT MAX 1.422 0.000 1.422 1.900 -1.900 -------*-
LE CONT'R MIN -1.161 0.000 -1.161 1.900 -1.900 -*-------
LE CONT'R MAX 0.719 0.000 0.719 1.900 -1.900 ------*--
LE CONT'R MIN -1.161 0.000 -1.161 1.900 -1.900 -*-------
LE CONT'R MAX 0.719 0.000 0.719 1.900 -1.900 ------*--

我想把第一列英文字母组合和后面的数字部分分离处理,这些字母可能没有空格,也可能有一个空格甚至多个空格
用正则表达式,怎么都不成功
...全文
553 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
X-i-n 2017-02-12
  • 打赏
  • 举报
回复
虽然大神喜欢摆姿态说教,说话不太着46,但是这回他没说错。 列与列之间的分割方法不唯一,有可能是用TAB分隔,逗号分隔,空格分隔,定长字段 你直接放这段文本上来不太好确认具体分割方式(有可能是tab分隔,空格分隔,定长字段),如果文本里字段和字段之间用的是TAB来分隔,那最简单,第一列的数据本身是不可能含tab的,直接用tab来做split分隔符一下就行。 如果字段和字段之间用的是空格,可以用space(2)来做分割符,取数组第一个元素,如果你还想取后面其它列的数据,那就在分割前,用循环处理一下,替换所有space(3)为space(2),替换完再分割
qq_18889079 2017-02-12
  • 打赏
  • 举报
回复
引用 3 楼 sp1234 的回复:
许多文本数据协议都是从“偏移位置”开始表示数据的,而不是什么“分割”。 例如
var line = "CHORD WIDppppppppppp   374.613   373.047     1.566";
var value = double.Parse(line.Substring(20, 10));
表示从第21个字符开始,10个字符是 value。 这里是位置协议,不是什么分割。你在编程之前要先能够理解数据表示协议,而不要盲目胡乱解释!
=== 这为大神真搞笑,还什么数据协议,我TM这就是个文本,简单的文本,我把他其中的东西分割出来,有问题?
baidu_37187202 2016-12-28
  • 打赏
  • 举报
回复
(?=\S)[-\d].*?(?=[$\n])
  • 打赏
  • 举报
回复
许多文本数据协议都是从“偏移位置”开始表示数据的,而不是什么“分割”。 例如
var line = "CHORD WIDppppppppppp   374.613   373.047     1.566";
var value = double.Parse(line.Substring(20, 10));
表示从第21个字符开始,10个字符是 value。 这里是位置协议,不是什么分割。你在编程之前要先能够理解数据表示协议,而不要盲目胡乱解释!
Tiger_Zhao 2016-12-19
  • 打赏
  • 举报
回复
Public Class Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim sr As New System.IO.StreamReader("Z:\test.txt")
Dim reg As New System.Text.RegularExpressions.Regex("^([A-Za-z' ]+)(.*)$")
Dim i As Integer = 0

While Not sr.EndOfStream
Dim strLine As String = sr.ReadLine()
i += 1
With reg.Matches(strLine)
If .Count = 0 Then
Debug.Print(String.Format("第{0}行:不可分|{1}", i, strLine))
Else
Debug.Print(String.Format("第{0}行:{1}|{2}", i, .Item(0).Groups(1).Value.Trim(), .Item(0).Groups(2).Value))
End If
End With
End While
End Sub

End Class

16,721

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧