[已解决]如果检测指定了行文本字符串的下一行是否为空行
本帖最后由 131738 于 2016-2-7 14:05 编辑例如:abcd
123456要求检查 "abcd" 的下一行是否为空行?
下面这个符合要求, 放过检查!abcd
123456谢谢!!! 顶起................................ Local $sSource = 'abcd' & @CRLF & @CRLF & '123456'
Local $sK = 'abcd'
StringRegExp($sSource, $sK & '\h*\r\n\h*\r\n\h*(?=\V|$)')
If Not @Error Then MsgBox(0, 'ok', $sSource)
afan 发表于 2016-2-6 19:02 http://www.autoitx.com/images/common/back.gif
谢谢,我明天编脚本试试............... 本帖最后由 131738 于 2016-2-7 11:43 编辑
afan 发表于 2016-2-6 19:02 http://www.autoitx.com/images/common/back.gif
没有效果, 你的文本变量 $sSource 包含 2 个 @CRLF , 'ok' 消息框显示这个变量的结果是 2 行文本之间有一个空行, 这不是我需要检查的情况.
修改文本变量 $sSource 包含 1 个 @CRLF, 'ok' 消息框显示这个变量结果是 2 行文本之间没有空行, 这就是我需要检查的情况.
但我无法从这段代码中获取有用信息, 无论 1 个 @CRLF 还是 2 个 @CRLF 都能显示 ok 消息框, 因此你的这段代码于我没有帮助.
分析你的这个正则表达式,似乎是检查 'abcd' 行尾($)有否任何水平空白字符, 回车符, 换行符.
受此启发, 考虑在'abcd' 尾部之后寻找回车符和空行:
如是将表示 'abcd' 尾部+回车符的表达式写成 (abcd)\b\r, 网上搜索到一条表示空行的表达式 \n[\s| ]*\r
拼凑为 (abcd)\b\r\n[\s|]*\r 之后, 在 Au3.REHelper.exe 测试, 居然通过了....
现在:
1. 我实际需要检查的行文本是 @@End@@, 替换 abcd 后, 原本有效的表达式失效了!
这个什么原因, 请帮忙修改下, 即实际需要的表达式是(@@End@@)\b\r\n[\s|]*\r
2. 看截图:
截图中的问题在 1.5 版中也存在, 当我准备反馈时发现你以升级到 1.5.1, 现在用 1.5.1 测试, 还是出现这个问题.
文字表达有限, 以上不知你能否看明白.........
谢谢! 预祝新年快乐!!!! 本帖最后由 afan 于 2016-2-7 13:47 编辑
上面的写错判断了,应该是这个:Local $sSource = 'abcd' & @CRLF & @CRLF & '123456'
Local $sK = 'abcd'
If StringRegExp($sSource, $sK & '\h*\r\n\h*\r\n\h*(?=\V|$)') Then
MsgBox(0, '含有空行', $sSource)
Else
MsgBox(0, '未含空行', $sSource)
EndIf正则工具输出的问题已确认是Bug,Local $aSR 应该改为 Local $Test,疏忽了,下个版本会修正。谢谢前辈反馈。 正则太复杂。版主厉害。 本帖最后由 131738 于 2016-2-7 13:48 编辑
我居然没看懂...
一个@crlf 是正常换行,两个@crlf才有一个空行
afan 发表于 2016-2-7 12:53 http://www.autoitx.com/images/common/back.gif
我也不懂.........
只是模糊理认为:
比如实际的文本文件只有 2 个连续的文本行, 之间没有空行, 总行数是 2, 如果之间有一个空行, 那么这个文件的总行数就是 3 行了.
如果脚本代码将第一行文本后面设置有 2 个 @crlf, 消息框就显示这连续的 2 行文本之间多了一个空行, 有 3 行显示, 这就不是源文本文件的实际情况;
而如果第一行文本后面设置只有 1 个 @crlf, 消息框就显示这 2 行文本是连续的, 之间没有空行了, 只有 2 行显示.
现在要请教的主要问题就是:
如果修改表达式 (@@End@@)\b\r\n[\s|]*\r 使其有效
其它我也说不明白, 也不求一定要弄清楚.......... 我也不懂.........
只是模糊理认为:
比如实际的文本文件只有 2 个连续的文本行, 之间没有空行, 总行数 ...
131738 发表于 2016-2-7 13:47 http://www.autoitx.com/images/common/back.gif
6楼修改了,再看看是不是这意思 回复 10# 131738
有两处 abcd 要改啊,莫非你的 abcd 是固定的?Local $sSource = '@@End@@' & @CRLF & @CRLF & '123456'
Local $sK = '@@End@@'
If StringRegExp($sSource, $sK & '\h*\r\n\h*\r\n\h*(?=\V|$)') Then
MsgBox(0, '含有空行', $sSource)
Else
MsgBox(0, '未含空行', $sSource)
EndIf 回复 9# afan
OK! 第一行文本替换为 @@End@@ , 六楼的代码 OK 了!
再次谢谢!!!!! 本帖最后由 131738 于 2016-2-7 14:03 编辑
回复131738
有两处 abcd 要改啊,莫非你的 abcd 是固定的?
afan 发表于 2016-2-7 13:55 http://www.autoitx.com/images/common/back.gif
下面第一行是固定.@@End@@
<strong>\R 匹 配</strong>这个格式编译后的文档丢失文本 "\R 匹 配"
加一个空行才能不丢失文本, 4000 个文件需要检查这个情况/ 回复 11# 131738
如果 @@End@@ 是固定的,那么就不需要提出 $sK 这个变量了,可以直接使用Local $sSource = '@@End@@' & @CRLF & @CRLF & '123456'
If StringRegExp($sSource, '@@End@@\h*\r\n\h*\r\n\h*(?=\V|$)') Then
MsgBox(0, '含有空行', $sSource)
Else
MsgBox(0, '未含空行', $sSource)
EndIf 回复131738
如果 @@End@@ 是固定的,那么就不需要提出 $sK 这个变量了,可以直接使用
afan 发表于 2016-2-7 14:02 http://www.autoitx.com/images/common/back.gif
ok 谢谢!!! 回复 14# 131738
不客气,解决就好,新年行大运!
页:
[1]
2