String 自动热键:搜索3个特定字符,然后从右侧为该列中的每个有效实例修剪8个字符
如果我不能简单地解释这一点,我深表歉意 我得到的是: 要从中获取数据的syslistview。第1列数据需要修改 我们知道的是: 我们要查找的3个字符始终是第1列中文本的最右边,如果它们存在的话。(这3个字符是“FUT”) 我们需要的是: 如果在第1列第1行中找到“FUT”,则从右侧修剪8个字符。(还包括修剪“FUT”)。然后向下移动并重复,直到该列的最后一个值 下面是我迄今为止开发的代码。如果发现“FUT”,需要帮助删除“XXXXX FUT”:String 自动热键:搜索3个特定字符,然后从右侧为该列中的每个有效实例修剪8个字符,string,replace,autohotkey,trim,String,Replace,Autohotkey,Trim,如果我不能简单地解释这一点,我深表歉意 我得到的是: 要从中获取数据的syslistview。第1列数据需要修改 我们知道的是: 我们要查找的3个字符始终是第1列中文本的最右边,如果它们存在的话。(这3个字符是“FUT”) 我们需要的是: 如果在第1列第1行中找到“FUT”,则从右侧修剪8个字符。(还包括修剪“FUT”)。然后向下移动并重复,直到该列的最后一个值 下面是我迄今为止开发的代码。如果发现“FUT”,需要帮助删除“XXXXX FUT”: 在本例中,我将使用正则表达式来“FUT”和“th
在本例中,我将使用正则表达式来“FUT”和“than”来删除8个字符 以下是一个这样的例子:
var = any amount of data can be here and xxxxxFUT as you can see FUT is removed!
; ~= is shorthand for RegExMatach
MsgBox % SubStr(var, 1, (var ~= "FUT") - 6) SubStr(var, (var ~= "FUT") + 3)
编辑:上面对代码进行了编辑,以更好地反映您的问题,因为您已对其进行了扩展
现在,要将此应用于您的代码:
#Persistent
#Include %A_ScriptDir%
#SingleInstance force
#NoEnv
SetWorkingDir %A_ScriptDir%
SetTitleMatchMode, 1
SetKeyDelay, 150, 150, Play
SetControlDelay,0
iffut:="FUT"
SetTimer,datos,10
return
datos:
IfWinExist,DataTable ahk_class #32770
{
WinGetTitle,winname,DataTable
StringTrimLeft,winname,winname,11
IfInString,winname,%iffut%
{
StringTrimRight,winname,winname,8
}
ControlGet,dato,List,,SysListView321,DataTable
StringReplace, dato, dato, %A_Tab%, `,, All
StringReplace, dato, dato, %A_Space%, `,, All
Loop, parse, dato, `n, `r
{
IfInString, A_LoopField, %iffut%
Results .= SubStr(A_LoopField, 1, (A_LoopField ~= "FUT") - 6) SubStr(A_LoopField, (A_LoopField ~= "FUT") + 3) "`n"
Else
Results .= A_LoopField "`n"
}
FormatTime, mydttm, , ddMMyy_HHmmss
FileAppend,%Results%,%winname%_%mydttm%.txt
return
}
RegExReplace
是最快捷、最简单的方法:
str := "before15NOVFUTsomeotherstring"
newStr := RegExReplace(str, ".{5}FUT", "")
msgbox % newStr
模式匹配“FUT”以及后面的任意5个字符,并用空白字符串替换它们。如果未找到,则不执行任何操作。编辑:
更好的答案是
dato := RegExReplace(dato, ".{5}FUT", "").
无需检查它是否在字符串中,因为如果它不在字符串中,它将不会执行任何操作由-->Elliot DeNolf提供
在其他地方得到了答案,所以也在这里发布 创建字符串模式,然后使用regexreplace删除所有此类字符串 以下是实现该目标的代码:
regex_patten = \d{2}[a-zA-Z]{3}FUT
if RegExMatch(string, regex_patten)
newstring := RegExReplace(string, regex_patten, "")
msgbox % "old string:`n`n" string "`n`nnew string`n`n" newstring
您正在尝试将正则表达式模式与
StringReplace
一起使用,这是不可能的。使用dato:=RegExReplace(dato,“.{5}FUT”,”)
。不需要检查它是否在字符串中,因为如果它不在字符串中,则不会执行任何操作。谢谢,ahkcoder。此代码仅修改了第一个单元格(第1列第1行)。flle的其余部分根本没有修改。请您告知我们如何创建循环,以便修改第一列的所有值。谢谢您的帮助,AhkCoder。我将尝试你提供的方法。再次感谢!无需执行RegExMatch
,因为RegExReplace
将检查模式,如果存在,则进行替换。一行代码newString:=RegExMatch(字符串,“\d{2}[a-zA-Z]{3}FUT”,”)
。
regex_patten = \d{2}[a-zA-Z]{3}FUT
if RegExMatch(string, regex_patten)
newstring := RegExReplace(string, regex_patten, "")
msgbox % "old string:`n`n" string "`n`nnew string`n`n" newstring