【问题标题】:JTextArea regex and ordered listsJTextArea 正则表达式和有序列表
【发布时间】:2012-07-23 14:20:32
【问题描述】:
我尝试在JTextArea 上使用的正则表达式有点问题。我正在尝试编写一个正则表达式,它将忽略任何有序列表并将文本区域内容打印到控制台。这些列表的结构遵循以下约定:
- 从新行开始。
- 以数字开头。
- 接着是句号。
- 后跟空格或制表符。
到目前为止,这是我正在使用的代码:
String content = txt.getText();
String removeOrderdList = content.replaceAll("^(\\d+).[ \t]+", "");
它适用于文本区域内容的第一行,但不适用于其他行。我可以删除“^”,但这会影响有句子的正常行
【问题讨论】:
标签:
java
regex
swing
list
jtextarea
【解决方案1】:
使用这个
String content = txt.getText();
String removeOrderdList = content.replaceAll("(?m)^\\d+\.[ \t]+", "");
【解决方案2】:
您可以使用多行标志(?m) 来执行此操作。这使得^ 匹配每一行的开头:
String content = "1. rgwfdfs \nnormal text \n3. fdhjsdf\nmore normal text";
System.out.println(content.replaceAll("(?m)^(\\d+)\\.[ \t]+.*\\n", ""));
打印
normal text
more normal text
另请注意,您需要使用\\. 来确保匹配句号而不是任何字符。
[编辑]
我刚刚意识到您并没有试图忽略列表,而只是忽略了列表的第一部分。所以,要做到这一点,只需使用:
String content = "1. rgwfdfs \nnormal text \n3. fdhjsdf\nmore normal text";
System.out.println(content.replaceAll("(?m)^(\\d+).[ \t]+", ""));
打印出来:
rgwfdfs
normal text
fdhjsdf
more normal text