【发布时间】:2020-07-30 00:17:18
【问题描述】:
我们有这个 VB.NET 方法。
目的:包含多行字符的字符串必须适合打印报告的列。字符串需要预处理以在给定数量的字符之前或之前有换行符,换行符不能是单词或数字的一部分。不能删除除空格以外的任何字符。
更多详情:
- "," 必须在行尾,不能放在新行的开头
我不知道如何解决:换行符处的字符被剥离,除非是空格,否则不应该。
<Extension()>
Public Function SplitOn(ByVal initial As String, ByVal MaxCharacters As Integer) As List(Of String)
Dim lines As List(Of String) = New List(Of String)()
If String.IsNullOrEmpty(initial) = False Then
Dim targetGroup As String = "Line"
Dim pattern As String = String.Format("(?<{0}>.{{1,{1}}})(?:\W|$)", targetGroup, MaxCharacters)
lines = Regex.Matches(initial, pattern, RegexOptions.Multiline Or RegexOptions.CultureInvariant).OfType(Of Match)().[Select](Function(mt) mt.Groups(targetGroup).Value).ToList()
End If
For i As Integer = 0 To lines.Count - 1
lines(i) = lines(i).TrimEnd(New Char() {CChar(vbCr), CChar(vbLf)})
Next
Return lines
End Function
测试用例
初始 =
"RW/40mm,6/50mm,4,2
N=6"
案例 1:
MaxCharacters = 10
当前结果:
RW/40mm,6
50mm,4,2
N=6
要求的结果:
RW/40mm,6/
50mm,4,2
N=6
问题:6后的/被剥离,应该保留
案例 2 MaxCharacters = 9
当前结果:
RW/40mm
6/50mm,4
2
N=6
要求的结果:
RW/40mm,
6/50mm,4,
2
N=6
问题:40mm后和4后需要保持
【问题讨论】:
-
函数的意图是什么?你能edit这个问题告诉我们
pattern的值吗? -
您为什么希望保留这些字符?您的模式说找到比 MaxCharacters 短的最长字符串,该字符串以非单词字符结尾,被丢弃,因此“RW/40mm,6”是 9 个字符(小于 10 个)并以“/”结尾,被丢弃。
-
@AndrewMorton
pattern在函数中定义。 -
这似乎是XY Problem。告诉我们您正在尝试完成什么,而不是如何完成它。
-
感谢您的意见。我已经改进了这个问题。 @NetMage 如何阻止“/”被丢弃?代码的哪一部分正在这样做? (我的正则表达式很弱)