我是正规表达的新手,非常感谢你的帮助.我正在尝试将一个表达式组合在一起,该表达式将使用未被单引号或双引号括起的所有空格分割示例字符串.我的最后一次尝试看起来像这样:(?!")并不是很有效.在报价之前,它正在拆分空间.
输入示例:
This is a string that "will be" highlighted when your 'regular expression' matches something.
Run Code Online (Sandbox Code Playgroud)
期望的输出:
This
is
a
string
that
will be
highlighted
when
your
regular expression
matches
something.
Run Code Online (Sandbox Code Playgroud)
请注意"will be"并'regular expression'保留单词之间的空格.
简单来说:
string streamR = sr.ReadLine(); // sr.Readline results in:
// one "two two"
Run Code Online (Sandbox Code Playgroud)
我希望能够将它们保存为两个不同的字符串,删除所有空格除了引号之间的空格.因此,我需要的是:
string 1 = one
string 2 = two two
Run Code Online (Sandbox Code Playgroud)
到目前为止,我发现有效的是以下代码,但它删除了引号内的空格.
//streamR.ReadLine only has two strings
string[] splitter = streamR.Split(' ');
str1 = splitter[0];
// Only set str2 if the length is >1
str2 = splitter.Length > 1 ? splitter[1] : string.Empty;
Run Code Online (Sandbox Code Playgroud)
这个的输出变成了
one
two
Run Code Online (Sandbox Code Playgroud)
我已经研究过正则表达式来分隔空格,除非引用但是我似乎无法获得正则表达式来工作/理解代码,特别是如何分割它们以便它们是两个不同的字符串.那里的所有代码都给我一个编译错误(我正在使用System.Text.RegularExpressions)
我需要按空格分割字符串,但引号中的短语应保留未分割.例:
word1 word2 "this is a phrase" word3 word4 "this is a second phrase" word5
Run Code Online (Sandbox Code Playgroud)
这应该导致preg_split之后的数组:
array(
[0] => 'word1',
[1] => 'word2',
[2] => 'this is a phrase',
[3] => 'word3',
[4] => 'word4',
[5] => 'this is a second phrase',
[6] => 'word5'
)
Run Code Online (Sandbox Code Playgroud)
我应该如何构建我的正则表达式呢?
PS.有相关的问题,但我不认为它适用于我的情况.接受的答案提供regexp来查找单词而不是空格.
这个线程与我想要的非常相似:正则表达式在空格上分割,除非用引号括起来
但是我需要一些我无法弄清楚的额外规则: - 上面的线程确实在空格上分割,除非它们是双引号.但是,它也会在标点符号上分开.我需要双引号内的任何东西保持为一个实体.
例如:
/ Update setting0 value ="new value"/ Save 应返回
/更新
setting0
value =
new value (我不关心它是否修剪报价)
/ Save
/导入"C:\ path\file.xml""C:\ path_2\file_2.xml"/退出应该返回
/导入
C:\ path\file.xml (我不在乎它是否关闭了引号)
C:\ path_2\file_2.xml
/ Exit
我最终使用上面的线程中的这个表达式:
(?<=")\w[\w\s]*(?=")|\w+|"[\w\s]*"
Run Code Online (Sandbox Code Playgroud)
有人可以帮我调整一下吗?谢谢!
I am trying to split text into words on the basis of space but I don't want to split words in single quotes into different words.
Here if you can see word 'fd f df' is converted into three words 'fd , f , df' but I want to get this as single word like 'fd f df'.
const str = `TEST = 'fd f df' AND Pitch = 444`
str.split(/\s+/)
// ["TEST", "=", "'fd", "f", "df'", "AND", "Pitch", "=", …Run Code Online (Sandbox Code Playgroud)