我試圖確定正確的RegEx語法來執行以下操作。我在第一次出現空格之前想要匹配每個字符的文件中有一行。正則表達式 - 貪婪空格匹配
因此,例如在線路:
123ABC XYZ富巴
目前還不清楚我爲什麼以下幾點:
^.*\s
中匹配了到B單詞欄:
123ABC XYZ富
在我看來,該\ s是貪婪的,但是我不能肯定我怎樣才能使它不貪心,只是匹配企圖使123ABC我已經嘗試了各種形式的這種正則表達式它非貪心^.*\s?
或類似的東西,但我一直不成功。預先感謝您
我試圖確定正確的RegEx語法來執行以下操作。我在第一次出現空格之前想要匹配每個字符的文件中有一行。正則表達式 - 貪婪空格匹配
因此,例如在線路:
123ABC XYZ富巴
目前還不清楚我爲什麼以下幾點:
^.*\s
中匹配了到B單詞欄:
123ABC XYZ富
在我看來,該\ s是貪婪的,但是我不能肯定我怎樣才能使它不貪心,只是匹配企圖使123ABC我已經嘗試了各種形式的這種正則表達式它非貪心^.*\s?
或類似的東西,但我一直不成功。預先感謝您
那是因爲.
可以是任何字符,包括空格。您可以嘗試
^[^ ]*\s
或
^\S*\s
代替。
這是一個貪婪的重新。但是你可以讓非貪婪重也:
^.*?\s
你的錯誤是你放置?
在錯誤的地方。
例子:
$ echo aaaa bbb cccc dddd > re.txt
$ cat re.txt
aaaa bbb cccc dddd
$ egrep -o '^.*\s' re.txt
aaaa bbb cccc
$ egrep -o '^\S*\s' re.txt
aaaa
$ egrep -o '^[^ ]*\s' re.txt
aaaa
和非貪婪搜索用Perl:
$ perl -ne 'print "$1\n" if /^(.*?)\s/' re.txt
aaaa
使用正則表達式^\S*(?=\s)
從一開始就意味着所有(*
)非空白字符(\S
) (^
),但必須遵循空格字符(\s
),但不包括在比賽 - 如果你想尾隨空白(S)被列入以及積極超前(?=\s)
,然後用正則表達式^\S*\s+
試試這個 - ?'^ * \ s'。在你的版本中,這個點是貪婪的 –
這正是我想要的 - 謝謝你們兩個 - 我以爲我在做的是讓*點變得貪婪,直到它找到一個空格(用\ s),然後我會把該?在表明只匹配0次或更多次之後。我現在明白了 - 謝謝 – vloche