Lua String Manipulation(找到之前和之后的单词)

时间:2017-04-18 02:36:34

标签: lua

我对这个论坛很新。我在操作正确的字符串时遇到了麻烦。

基本上,我尝试做的是接收输入字符串,如下例所示:

str = "Say hello to=Stack overflow, Say goodbye to=other resources"

for question, answer in pairs(string.gmatch(s, "(%w+)=(%w+)")) 
  print(question, answer) 
end

我希望它返回:问题="向"打招呼并回答="堆栈溢出,问题="告别"等等等等。但相反,它会在等号和紧随其后的单词之前拾取单词。我甚至尝试了*量词,它也做了同样的事情。 我也尝试过这种模式

[%w%s]*=[%w%s]

我只是希望能够将这个字符串排序到一个键值表中,其中键是每个=之前的所有单词,并且值是所有单词之后相等但在逗号之前。 有没有人有建议?

1 个答案:

答案 0 :(得分:3)

您可以使用以下内容:

local str = "Say hello to=Stack overflow, Say goodbye to=other resources"
for question, answer in string.gmatch(str..",", "([^=]+)=([^,]+),%s*") do
  print(question, answer) 
end

"([^=]+)=([^,]+),%s*"表示以下内容:除=[^=])以外的任何内容(+)重复一次或多次(=)后跟[^=]+,然后除&之外的任何内容#39;,',后跟逗号和可选空格(以避免在下一个问题中包含它们)。我还在字符串中添加了逗号,因此它也解析了最后一对。

在评论中对每个请求进一步详细说明:在表达式[=]中,=指定一个包含一个允许字符([^=])和=的集合,因此除了+(.-)=(.-),%s*允许该集重复1次或更多次之外,它设置为允许任何字符。

正如@lhf建议您可以使用更简单的表达式:=,这意味着:取出所有字符,直到第一个-,匹配非贪婪),然后全部使用第一个public static void main(String[] args){ Scanner input=null; String[] line = new String[1]; line[0]=""; GetFile(input); int count=ReadFile(input,line); int[] year = new int[count]; int[] temperature = new int[count]; CreateArray(year,temperature,line); PrintData(year,temperature); } public static void GetFile(Scanner input){ Scanner name = new Scanner(System.in); boolean filefound=false; while(!filefound){ try{ System.out.println("Enter The Name of File or File Path: "); String filename = name.nextLine(); input = new Scanner(new File(filename)); filefound=true; }catch(FileNotFoundException e){ System.out.println("Error: File Not Found"); System.out.println(""); } } } public static int ReadFile(Scanner input, String[] line){ int count=0; while(input.hasNextLine()){ line[0]=line[0] + input.nextLine()+" "; count++; } return count; } public static void CreateArray(int[] year, int[] temperature, String[] line){ Scanner MakeArray = new Scanner(line[0]); while(MakeArray.hasNext()){ int i= MakeArray.nextInt()-1; year[i]=MakeArray.nextInt(); temperature[i]=MakeArray.nextInt(); } } public static void PrintData(int[] year, int[] temperature){ for(int i=0;i<year.length;i++) System.out.println("("+year[i]+", "+temperature[i]+")"); } //Here is my data 1 1950 11 2 1950 22 3 1950 65 4 1950 103 5 1950 99 6 1950 54 7 1950 109 8 1950 85 9 1950 72 10 1950 120 之前的字符。