我有一些正则表达式,在“\ n”返回的两侧都添加了空格
var regex = new RegExp(r'\n');
final newString = text.replaceAll(regex, " \n ");
但是,它也会不断添加它,因为它也与“\ n”匹配。我该如何匹配仅在两边都没有空格的退货?
最佳答案
How would I match only a return that doesn't have spaces on either side?
如果它在至少一侧没有空间,或者仅在两侧都没有空间时才表示匹配?
也就是说,是否要在
"x \ny"
中匹配换行符?如果要匹配两边都没有空格的换行符,可以使用:
RegExp(r"(?<! )\n(?! )")
这将匹配一个\n
(换行符),该前缀不带空格,也不带空格。这意味着"x\ny"
,但没有"x \ny"
,"x\n y"
和"x \n y"
。如果要匹配已经在其周围至少有一个空格但又不是两个空格的换行符,则可以使用@Jerry Jeremiah的建议:
RegExp(r"(?!< )\n|\n(?! )");
这将匹配"x\ny"
,"x \ny"
和"x\n y"
,但不匹配"x \n y"
。您可以用空格替换匹配项,即使一侧已经有空格。该侧现在将有两个空格,这可能是不必要的。
如果您想避免这种情况,我可以采用另一种方法:匹配所有换行符,并根据它们之间是否已经有空格来替换它们:
var newlinesRE = RegExp(r"(?<=([ \n])?)\n(?=( )?)");
String flankNewlinesBySpace(String string) =>
string.replaceAllMapped(newlinesRE, (m) =>
"${m[1] == null ? " " : ""}\n${m[2] == null ? " " : ""}");
这应该与每个换行符匹配,并捕获前后的空格。它用换行符代替。如果它之前没有看到空格或换行符,则在换行符之前插入一个空格。如果在换行符后没有看到空格,则插入一个。
(这应确保
"\n\n"
变为" \n \n "
,并且它们之间只有一个空格)。结果为:
"x\ny"
↦"x \n y"
"x \ny"
↦"x \n y"
"x\n y"
↦"x \n y"
"x \n y"
↦"x \n y"
"x\n\ny"
↦"x \n \n y"
"x\n \ny"
↦"x \n \n y"
"x \n\n y"
↦"x \n \n y"
关于regex - 正则表达式,用于匹配两边都没有空格的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63681457/