接受的示例:
This is a try! And this is the second line!
不接受的示例:
this is a try with initial spaces and this the second line
所以,我需要:
- 没有仅由空格“”组成的字符串
- 没有第一个字符是空格的字符串
- 新线没问题;只有第一个字符不能是新行
我正在使用
^(?=\s*\S).*$
但这种模式不允许换行。
你可以试试这个正则表达式
^(?!\s*$|\s).*$
---- -- --
| | |->matches everything!
| |->no string where first char is whitespace
|->no string made only by whitespaces
你需要使用singleline
模式..
你可以在这里试试..你需要使用matches
方法
“没有仅由空格组成的字符串”与“没有第一个字符为空格的字符串”相同,因为它也以空格开头。
您必须设置Pattern.MULTILINE
将 ^ 和 $ 的含义更改为行首和行尾,而不仅仅是整个字符串
"^\\S.+$"
我不是 Java 人,但 Python 中的解决方案可能如下所示:
In [1]: import re
In [2]: example_accepted = 'This is a try!\nAnd this is the second line!'
In [3]: example_not_accepted = ' This is a try with initial spaces\nand this the second line'
In [4]: pattern = re.compile(r"""
....: ^ # matches at the beginning of a string
....: \S # matches any non-whitespace character
....: .+ # matches one or more arbitrary characters
....: $ # matches at the end of a string
....: """,
....: flags=re.MULTILINE|re.VERBOSE)
In [5]: pattern.findall(example_accepted)
Out[5]: ['This is a try!', 'And this is the second line!']
In [6]: pattern.findall(example_not_accepted)
Out[6]: ['and this the second line']
这里的关键部分是 flag re.MULTILINE
。启用此标志后,^
不仅$
匹配字符串的开头和结尾,还匹配由换行符分隔的行的开头和结尾。我敢肯定Java也有类似的东西。