正则高手进

sky123123 2010-04-19 03:35:43
请问正则高手,
Pattern pCells = Pattern.compile("(\"[^\"]*(\"{2})*[^\"]*\")*[^,]*,");

这句话表达的意思是什么哦 看不太懂哦 ( ⊙ o ⊙ )
...全文
222 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
sky123123 2010-04-19
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 hbgzg3006 的回复:]
Java code

Matcher m = Pattern
.compile("(\"[^\"]*(\"{2})*[^\"]*\")*[^,]*,")
.matcher(
"洲际酒店(杭州),\"1,388\",538,100,含双早,杭州益乐路39号,\"\……
[/Quote]


嗯,谢谢咯,终于找到原因咯 O(∩_∩)OO(∩_∩)O~~
zfq642773391 2010-04-19
  • 打赏
  • 举报
回复
\好像是转义"的吧
sky123123 2010-04-19
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 hbgzg3006 的回复:]
Java code

Matcher m = Pattern
.compile("(\"[^\"]*(\"{2})*[^\"]*\")*[^,]*,")
.matcher(
"洲际酒店(杭州),\"1,388\",538,100,含双早,杭州益乐路39号,\"\……
[/Quote]

洲际酒店(杭州),\"1,388\",538,100,含双早,杭州益乐路39号,\"\"\"Yile Road 39, Hangzhou, Zhejiang Province\"\"\","



洲际酒店(杭州),"1,388",538,100,含双早,杭州益乐路39号,"""Yile Road 39, Hangzhou, Zhejiang Province""","

在同时做java的String的时候还有什么不同吗 下面一句是直接从文本中读取得到 但是 执行结果却不同哦
hbgzg3006 2010-04-19
  • 打赏
  • 举报
回复

Matcher m = Pattern
.compile("(\"[^\"]*(\"{2})*[^\"]*\")*[^,]*,")
.matcher(
"洲际酒店(杭州),\"1,388\",538,100,含双早,杭州益乐路39号,\"\"\"Yile Road 39, Hangzhou, Zhejiang Province\"\"\",");
while (m.find())
System.out.println(m.group());
//result
洲际酒店(杭州),
"1,388",
538,
100,
含双早,
杭州益乐路39号,
"""Yile Road 39, Hangzhou, Zhejiang Province""",
sky123123 2010-04-19
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 hbgzg3006 的回复:]
引用 10 楼 sky123123 的回复:

引用 8 楼 zfq642773391 的回复:
Zhejiang Province后少个逗号,所以匹配不到

Java code

while (mCells.find()) {
str = mCells.group();
cells.add(str);
……

事实证明, 加上英语的,是可以的。
[/Quote]

可是 后面的三个 """ 好像还是没有出来哦
hbgzg3006 2010-04-19
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 sky123123 的回复:]

引用 8 楼 zfq642773391 的回复:
Zhejiang Province后少个逗号,所以匹配不到

Java code

while (mCells.find()) {
str = mCells.group();
cells.add(str);
……
[/Quote]】
事实证明, 加上英语的,是可以的。
sky123123 2010-04-19
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 zfq642773391 的回复:]
Zhejiang Province后少个逗号,所以匹配不到
[/Quote]

while (mCells.find()) {
str = mCells.group();
cells.add(str);
}
System.out.println(cells);
就这样运行之后 Zhejiang Province""" 没有哦

加个逗号还 """ 还是没有出来 而且 文本中有百万条记录呢 加个逗号的方法也不可取哦
zfq642773391 2010-04-19
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 sky123123 的回复:]
引用 4 楼 iori200908 的回复:
() 表示括号内容为一个整体
\" 表示为一个双引号
[^"] 表示除双引号以外的任意字符
* 表示跟在单个字符后为这个字符重复0次或多次,跟在()表示()内内容重复0次或多次
[^,] 表示除逗号以外的任意字符
, 表示一个逗号字符

再把上面的正则表达式联起来就看就能看懂了


我从文件中读取文本:洲际酒店(杭州),"1,38……
[/Quote]
如果可能,在要匹配的文本最后加个逗号
zfq642773391 2010-04-19
  • 打赏
  • 举报
回复
Zhejiang Province后少个逗号,所以匹配不到
sky123123 2010-04-19
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 iori200908 的回复:]
() 表示括号内容为一个整体
\" 表示为一个双引号
[^"] 表示除双引号以外的任意字符
* 表示跟在单个字符后为这个字符重复0次或多次,跟在()表示()内内容重复0次或多次
[^,] 表示除逗号以外的任意字符
, 表示一个逗号字符

再把上面的正则表达式联起来就看就能看懂了
[/Quote]

我从文件中读取文本:洲际酒店(杭州),"1,388",538,100,含双早,杭州益乐路39号,"""Yile Road 39, Hangzhou, Zhejiang Province"""
解析结果是浙江米兰洲际酒店(杭州),, "1,388",, 538,, 100,, 含双早,, 杭州益乐路39号,, :"""Yile Road 39,, Hangzhou,

而我想要的结果是:
浙江米兰洲际酒店(杭州),, "1,388",, 538,, 100,, 含双早,, 杭州益乐路39号,, """Yile Road 39,, Hangzhou,Zhejiang Province"""

可是:Zhejiang Province""" 却丢了,该怎么解决呢 谢谢咯 O(∩_∩)O~
zhuzhusany 2010-04-19
  • 打赏
  • 举报
回复
"1""2"3,

1和2不能是"
3不能是,
的字符串(1,2,3指位置)
"""", OK
"xx""xx"x, OK
""x""x, NO
, OK
平淡面对 2010-04-19
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 sky123123 的回复:]

如果要分割“ "" ” 该怎么写啊
[/Quote]


Pattern pCells = Pattern.compile("\\s{2}\"{2}\\s{2}");
iori200908 2010-04-19
  • 打赏
  • 举报
回复
() 表示括号内容为一个整体
\" 表示为一个双引号
[^"] 表示除双引号以外的任意字符
* 表示跟在单个字符后为这个字符重复0次或多次,跟在()表示()内内容重复0次或多次
[^,] 表示除逗号以外的任意字符
, 表示一个逗号字符

再把上面的正则表达式联起来就看就能看懂了
zfq642773391 2010-04-19
  • 打赏
  • 举报
回复
第一个引号和最后一个用来表示这个正则表达式的,因为compile的参数是String的
其余的引号前都有\,是用来转义引号的,也就是说这个正则里面包含有引号,还不止一个
中括号是用来分组的,^表示行的开头,对字符表示不存在,*表示0个或多个
(\"[^\"]*(\"{2})*[^\"]*\")*
这部分表示这个正则匹配0个或多个(),()里的内容是这样
\"是引号,[^\"]*表示要不存在0个或多个",要有0个或多个(\"{2})*表示存在0个或多个有两个"的匹配
...
分析不出整体式干嘛的,正则没学好
等高手来
sky123123 2010-04-19
  • 打赏
  • 举报
回复
如果要分割“ "" ” 该怎么写啊
hbgzg3006 2010-04-19
  • 打赏
  • 举报
回复
这正则写的,真晕啊。那么多表达是后面都是*,应该表达式中有就能匹配。你可以试试。这也算是以,分割吧。

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧