3

我试图从以下输入中分离出单词、括号和=>and :<=>

(<=>A B) OR (C AND D) AND(A AND C)

到目前为止,我只是分离出这些词(请参阅 参考资料Scanner#useDelimeter()):

sc.useDelimeter("[^a-zA-Z]");

使用时:

sc.useDelimeter("[\\s+a-zA-Z]");

我得到的输出只是括号。

我不想要但想要AND )

我怎么做?做\\s+同样的结果。

另外,分隔符与正则表达式有何不同?我熟悉 PHP 中的正则表达式。使用的符号是否相同?

我想要的输出:

(
<=>
A
(and so on)
4

2 回答 2

2

您需要一个宽度为零的 delimitimg 正则表达式(因为您有相邻的术语),因此环顾四周是唯一的选择。尝试这个:

sc.useDelimeter("((?<=[()>])\\s*)|(\\s*\\b\\s*)");

此正则表达式表示“在括号或大于或在单词边界之后,丢弃空格”


另请注意,字符类[\\s+a-zA-Z]包括+字符 - 大多数字符在字符类中失去任何特殊的正则表达式含义。似乎您试图说“一个或多个空格”,但这不是您这样做的方式。

于 2013-04-13T20:56:26.777 回答
0

里面[]^意思是“不”,所以第一个正则表达式 ,[^a-zA-Z]说“给我所有不是az 或 AZ 的东西”

第二个正则表达式,表示[\\s+a-zA-Z]“给我所有空格、+、az 或 AZ”。请注意,“+”在字符类中是文字加号。

于 2013-04-13T20:24:01.243 回答