Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 自动热键:搜索3个特定字符,然后从右侧为该列中的每个有效实例修剪8个字符_String_Replace_Autohotkey_Trim - Fatal编程技术网

String 自动热键:搜索3个特定字符,然后从右侧为该列中的每个有效实例修剪8个字符

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

如果我不能简单地解释这一点,我深表歉意

我得到的是: 要从中获取数据的syslistview。第1列数据需要修改

我们知道的是: 我们要查找的3个字符始终是第1列中文本的最右边,如果它们存在的话。(这3个字符是“FUT”)

我们需要的是: 如果在第1列第1行中找到“FUT”,则从右侧修剪8个字符。(还包括修剪“FUT”)。然后向下移动并重复,直到该列的最后一个值

下面是我迄今为止开发的代码。如果发现“FUT”,需要帮助删除“XXXXX FUT”:


在本例中,我将使用正则表达式来“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