正则表达式在字符串的第n个字符处或之前查找空格

问题描述:

我需要在字符串的第n个字符处或之前查找空格字符。正则表达式在字符串的第n个字符处或之前查找空格

实施例,假定n为20:在串

Find one space in the right place 
^  ^ ^^ 
0   10  M 20 

ħ是在20位,INT这种情况下我需要找到20位置之前的第一空间,前一个在第18个位置的字“the”,刚好在M

我可以使用正lookbehinds像

(?<=.{80}). 

找到第n个字符,但后来我需要回去,直到我找到的第一个空格字符,我不知道怎么办。

我使用记事本++,它不支持变长lookbehinds,如果可能我想要一个答案,让我也可以在记事本++中使用正则表达式。谢谢。

+0

为什么正则表达式?线性扫描应该可以工作,甚至更快。 – nhahtdh 2012-08-13 13:03:13

+0

因为我没有使用编程语言 – Gabber 2012-08-13 13:05:13

+0

正则表达式找到..你是什么意思发现?你想要在第20个字符之前的最后一个空格的位置吗? – FailedDev 2012-08-13 13:05:49

你可以使用这个表达式(但不包括引号):

"^.{1,19} " 

注意最后的空间。

我已经用Notepad ++ 6.1.5(发布时的最新版本)测试过了。根据feature list,正则表达式与PCRE兼容(后视工作,但仅限固定宽度)。上面的正则表达式不适用于我现有的旧版本(Notepad ++ 5.9)。

既然你需要更换别的东西的空间,你可能需要使用捕获组保存的文本,只替换空间(内,但不包括引号):

"^(.{1,19}) " (Find) 
"\1replace_space" (Replace) 

注:正则表达式会搜索第20个字符之前或之后的空格。如果你想要第20个字符之前的空间要严格,更改19到18

+0

对于'n = 20'我相信你应该使用'^。 {1,18}(\ s)'pattern – 2012-08-13 13:18:58

+0

我只需要空间,不是全部字符串 – Gabber 2012-08-13 13:20:33

+0

@Gabber:如果空格在第20个字符处,那么匹配的空格是那个字符还是它之前的一个空格? – nhahtdh 2012-08-13 13:23:19

对于N = 20,使用正则表达式(\s)\S*.(?<=^.{20})