String 字符串修剪和cl ppcre无法修剪#\Newline
我在raspberry pi(机器类型armv61,debian jessie)上使用Clozure CL 1.11通过ojdbc7.jar运行oracle查询:String 字符串修剪和cl ppcre无法修剪#\Newline,string,common-lisp,newline,String,Common Lisp,Newline,我在raspberry pi(机器类型armv61,debian jessie)上使用Clozure CL 1.11通过ojdbc7.jar运行oracle查询: (defun query (statement) (let ((options ; compiled java filename is Query.class (list "-cp" "/java-files-dir/ojdbc7.jar:/java-files-dir/&quo
(defun query (statement)
(let ((options ; compiled java filename is Query.class
(list "-cp" "/java-files-dir/ojdbc7.jar:/java-files-dir/" "Query" statement))))))
(with-output-to-string
(stream)
(ccl:run-program "java" options :output stream))))
结果如下:
"DAVY
JONES
"
当我将结果字符串强制放入列表时,我看到列由\
和\\Newline
分隔,而字符串的末尾包含一个\
和两个\\Newline
字符:
(#\D #\A #\V #\Y #\ #\Newline #\J #\O #\N #\E #\S #\ #\Newline #\Newline)
我仔细阅读了一遍,但仍然无法理解为什么字符串修剪
不能用\newline
、\linefeed
或\return
来修剪任何东西,以及
(cl ppcre:regex替换“#\Newline”(查询“…语句…”)”)(cl ppcre:regex replace#\Newline(查询“…语句…”)”) 也不起作用,而
(cl-ppcre:split #\Newline (query "...statement..."))
成功地将列拆分为类似(“DAVY”“JONES”)
的列表
编辑
我注意到上面用“\code>”删除的代码“\Newline”显然造成了一种混乱,我可能将字符串修剪称为“\Newline”,但这是一种打字错误
调用(cl-ppcre:regex-replace
\newline…)
和(string-trim'(#\newline)…)
都无法摆脱#\newline.实际上,我可以通过调用
(cl-ppcre:split#\Newline
)来处理我的工作,在某些情况下,我甚至更愿意这样做
但是,我想理解为什么使用“(#\Newline)
调用string trim会修剪字符串末尾的#\Newline,但不能修剪单词之间的#\Newline
这里的问题是不能在字符串中使用像\Newline
这样的字符语法。它将被简单地读取为8个字符的字符串
正如Renzo在评论中提到的,您可以将要修剪的字符作为列表而不是字符串
(string-trim '(#\space #\newline) "DAVY
JONES
")
;=> "DAVY
; JONES"
您也可以只在字符串中写换行符,尽管这看起来很难看(您也可以使用):
在正则表达式中,应该对换行符使用\n
(cl-ppcre:regex-replace-all "(\\n|\\s*$)" "DAVY
JONES
" "")
;=> "DAVY JONES"
使用(\n |\s*$)
替换所有换行符以及输入结束前的所有空白
这里的问题是不能在字符串中使用像\Newline
这样的字符语法。它将被简单地读取为8个字符的字符串
正如Renzo在评论中提到的,您可以将要修剪的字符作为列表而不是字符串
(string-trim '(#\space #\newline) "DAVY
JONES
")
;=> "DAVY
; JONES"
您也可以只在字符串中写换行符,尽管这看起来很难看(您也可以使用):
在正则表达式中,应该对换行符使用\n
(cl-ppcre:regex-replace-all "(\\n|\\s*$)" "DAVY
JONES
" "")
;=> "DAVY JONES"
使用
(\n |\s*$)
替换所有换行符,以及输入结束前的所有空格。哪个字符串修剪调用对您不起作用?例如,在Mac上的CCL中,(字符串修剪“(#\Space#\Newline)字符串)
工作正常。@Renzo我已经尝试了一个更广泛的列表。没有提及它是为了不让问题变得混乱哪个调用字符串修剪
对你不起作用?例如,在Mac上的CCL中,(字符串修剪“(#\Space\Newline)字符串)
工作正常。@Renzo我已经尝试了一个更广泛的列表。没有提及它是为了不让问题变得混乱。请查看我的编辑,调用cl-ppcre:regex替换为“#\Newline”是一个输入错误。我想了解为什么调用字符串修剪
时使用”(#\Newline)
可以修剪字符串末尾的\Newline
s,但不能修剪单词之间的\Newline
s。@barerdstring-trim
仅从开头和结尾修剪。hyperspec描述中的第一句话:“string trim返回字符串的子字符串,字符包中的所有字符都从开头和结尾剥离。”。您只需使用(删除#\newline string)
如果你想删除所有的换行符。显然,我没有仔细阅读CLHS。我很抱歉。请参阅我的编辑,调用cl ppcre:regex replace with“#\Newline”是一个打字错误。我想了解为什么调用字符串修剪
with”(#\Newline)
可以修剪字符串末尾的\Newline
s,但不能修剪单词之间的\Newline
s。@barerdstring-trim
仅从开头和结尾修剪。hyperspec描述中的第一句话:string trim返回字符串的子字符串,其中字符包中的所有字符都从开头和结尾剥离。“。如果要删除所有换行符,您应该使用(remove#\newline string)
。显然,我没有彻底阅读CLH。我很抱歉。