一个正则表达式的设置问题.

hfzsjz 2010-02-27 04:34:53
先看源文件:
<DIV class=box><A class=pic href=\"/myhome.html?id=5562915\"><IMG src=\"http://logo.tool.hexun.com/23e254-40.jpg\"></A> <P><A href=\"/myhome.html?id=5562915\">网络友声</A></P> <P title=软件﹑新闻﹑娱乐﹑生活﹑通天下>软件﹑新闻﹑娱乐﹑生活﹑通天下</P> <P class=come>

我用以下来获取id和名字

Regex myRegex = new Regex(@"</a> <p><a href=""/myhome.html?id=(?<blogid>[^<]+?)"">(?<users>[^<]+?)</a></p>", RegexOptions.IgnoreCase);

主要是获取A href=\"/myhome.html?id=5562915\">网络友声</A></P>里的5562915和网络友声.

但获取不了,请指点,谢谢!
...全文
158 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
hfzsjz 2010-03-04
  • 打赏
  • 举报
回复
引用 8 楼 lxcnn 的回复:
楼主的正则,主要问题在于
myhome.html?id
这里的“.”和“?”是正则中的元字符,需要进行转义处理的


好,谢谢.结贴.有点晚了.不好意思.
hfzsjz 2010-03-01
  • 打赏
  • 举报
回复
to:lxcnn
你好,非常感谢,能用.

但我的为什么不能呢,能详细解释一下吗?谢谢!
-过客- 2010-03-01
  • 打赏
  • 举报
回复
引用 9 楼 zhoukang0916 的回复:
客客是睡不着?


同是天下失眠人?
PandaIT 2010-03-01
  • 打赏
  • 举报
回复
引用 8 楼 lxcnn 的回复:
楼主的正则,主要问题在于
myhome.html?id
这里的“.”和“?”是正则中的元字符,需要进行转义处理的


客客是睡不着?
-过客- 2010-03-01
  • 打赏
  • 举报
回复
楼主的正则,主要问题在于
myhome.html?id
这里的“.”和“?”是正则中的元字符,需要进行转义处理的
telancs 2010-02-28
  • 打赏
  • 举报
回复
我来学习一下 看看有没有帮助
-过客- 2010-02-27
  • 打赏
  • 举报
回复
try...

            Regex reg = new Regex(@"(?is)<A\s+href=""/myhome\.html\?id=(?<id>\d+)"">(?<text>.*?)</A>");
Match m = reg.Match(yourStr);
if (m.Success)
{
richTextBox2.Text += m.Groups["id"].Value + "\n";
richTextBox2.Text += m.Groups["text"].Value + "\n";
}
hfzsjz 2010-02-27
  • 打赏
  • 举报
回复
希望能针对我的HTML源代码给出相应的正则,谢谢以上两位.
w15151450299 2010-02-27
  • 打赏
  • 举报
回复
下面就是第一个替换命令:
  :%s/\([^,]*\),\([^,]*\),\([^,]*\),\(.*\)/, ,/
  这里的方法跟例1基本一样,第一个列(姓名)用这个表达式来匹配:\([^,]*\),即第一个逗号之前的所有字符,而姓名内容被用标记下来。公司名和州名缩写字段用同样的方法标记为和,而最后一个字段用\(.*\)来匹配("匹配所有字符直到行末")。替换部分则引用上面标记的那些内容来进行构造。
  下嬲飧鎏婊幻钤蛴美慈コ崭瘢?
  :%s/[ \t]*,[ \t]*/,/g
  我们还是分解来看:[ \t]匹配空格/制表符,[ \t]* 匹配0或多个空格/制表符,[ \t]*,匹配0或多个空格/制表符后面再加一个逗号,最后,[ \t]*,[ \t]*匹配0或多个空格/制表符接着一个逗号再接着0或多个空格/制表符。在替换部分,我们简单的我们找到的所有东西替换成一个逗号。这里我们使用了结尾的可选的g参数,这表示在每行中对所有匹配的串执行替换(而不是缺省的只替换第一个匹配串)。
  例3
  假设有一个多字符的片断重复出现,例如:
  Billy tried really hard
  Sally tried really really hard
  Timmy tried really really really hard
  Johnny tried really really really really hard
  而你想把"really"、"really really",以及任意数量连续出现的"really"字符串换成一个简单的"very"(simple is good!),那么以下命令:
  :%s/\(really \)\(really \)*/very /
  就会把上述的文本变成:
  Billy tried very hard
  Sally tried very hard
  Timmy tried very hard
  Johnny tried very hard
  表达式\(really \)*匹配0或多个连续的"really "(注意结尾有个空格),而\(really \)\(really \)* 匹配1个或多个连续的"really "实例。
  困难的例子(不可思议的象形文字)
  Coming soon.
  不同工具中的正则表达式
  OK,你已经准备使用RE(regular expressions,正则表达式),但是你并准备使用vi。所以,在这里我们给出一些在其他工具中使用RE的例子。另外,我还会总结一下你在不同程序之间使用RE可能发现的区别。
  当然,你也可以在Visual C++编辑器中使用RE。选择Edit->Replace,然后选择"Regular expression"选择框,Find What输入框对应上面介绍的vi命令:%s/pat1/pat2/g中的pat1部分,而Replace输入框对应pat2部分。但是,为了得到vi的执行范围和g选项,你要使用Replace All或者适当的手工Find Next and Replace(译者按:知道为啥有人骂微软弱智了吧,虽然VC中可以选中一个范围的文本,然后在其中执行替换,但是总之不够vi那么灵活和典雅)。
  sed
  Sed是Stream EDitor的缩写,是Unix下常用的基于文件和管道的编辑工具,可以在手册中得到关于sed的详细信息。
  这里是一些有趣的sed脚本,假定我们正在处理一个叫做price.txt的文件。注意这些编辑并不会改变源文件,sed只是处理源文件的每一行并把结果显示在标准输出中(当然很容易使用重定向来定制):
  sed脚本 描述
  sed 's/^$/d' price.txt 删除所有空行
  sed 's/^[ \t]*$/d' price.txt 删除所有只包含空格或者制表符的行
  sed 's/"//g' price.txt 删除所有引号
  awk
  awk是一种编程语言,可以用来对文本数据进行复杂的分析和处理。可以在手册中得到关于awk的详细信息。这个古怪的名字是它作者们的姓的缩写(Aho,Weinberger和Kernighan)。
  在Aho,Weinberger和Kernighan的书The AWK Programming Language中有很多很好的awk的例子,请不要让下面这些微不足道的脚本例子限制你对awk强大能力的理解。我们同样假定我们针对price.txt文件进行处理,跟sed一样,awk也只是把结果显示在终端上。
  awk脚本 描述
  awk ' !~ /^$/' price.txt 删除所有空行
  awk 'NF > 0' price.txt awk中一个更好的删除所有空行的办法
  awk ' ~ /^[JT]/ ' price.txt 打印所有第二个字段是'J'或者'T'打头的行中的第三个字段
  awk ' !~ /[Mm]isc/ {print + }' price.txt 针对所有第二个字段不包含'Misc'或者'misc'的行,打印第3和第4列的和(假定为数字)
  awk ' !~ /^[0-9]+\.[0-9]*$/ ' price.txt 打印所有第三个字段不是数字的行,这里数字是指d.d或者d这样的形式,其中d是0到9的任何数字
  awk ' ~ /John|Fred/ ' price.txt 如果第二个字段包含'John'或者'Fred'则打印整行
  grep
  grep是一个用来在一个或者多个文件或者输入流中使用RE进行查找的程序。它的name编程语言可以用来针对文件和管道进行处理。可以在手册中得到关于grep的完整信息。这个同样古怪的名字来源于vi的一个命令,g/re/p,意思是global regular expression print。
  下面的例子中我们假定在文件phone.txt中包含以下的文本,——其格式是姓加一个逗号,然后是名,然后是一个制表符,然后是电话号码:
  Francis, John 5-3871
  Wong, Fred 4-4123
  Jones, Thomas 1-4122
  Salazar, Richard 5-2522
  grep命令 描述
  grep '\t5-...1' phone.txt 把所有电话号码以5开头以1结束的行打印出来,注意制表符是用\t表示的
  grep '^S[^ ]* R' phone.txt 打印所有姓以S打头和名以R打头的行
  grep '^[JW]' phone.txt 打印所有姓开头是J或者W的行
  grep ', ....\t' phone.txt 打印所有姓是4个字符的行,注意制表符是用\t表示的
  grep -v '^[JW]' phone.txt 打印所有不以J或者W开头的行
  grep '^[M-Z]' phone.txt 打印所有姓的开头是M到Z之间任一字符的行
  grep '^[M-Z].*[12]' phone.txt 打印所有姓的开头是M到Z之间任一字符,并且点号号码结尾是1或者2的行
  egrep
  egrep是grep的一个扩展版本,它在它的正则表达式中支持更多的元字符。下面的例子中我们假定在文件phone.txt中包含以下的文本,——其格式是姓加一个逗号,然后是名,然后是一个制表符,然后是电话号码:
  Francis, John 5-3871
  Wong, Fred 4-4123
  Jones, Thomas 1-4122
  Salazar, Richard 5-2522
  egrep command Description
  egrep '(John|Fred)' phone.txt 打印所有包含名字John或者Fred的行
  egrep 'John|22$|^W' phone.txt 打印所有包含John 或者以22结束或者以W的行
  egrep 'net(work)?s' report.txt 从report.txt中找到所有包含networks或者nets的行
  正则表达式语法支持情况
  命令或环境 . [ ] ^ $ \( \) \{ \} ? + | ( )
  vi X X X X X
  Visual C++ X X X X X
  awk X X X X X X X X
  sed X X X X X X
  Tcl X X X X X X X X X
  ex X X X X X X
  grep X X X X X X
  egrep X X X X X X X X X
  fgrep X X X X X
  perl X X X X X X X X X
  vi替换命令简介
  Vi的替换命令:
  :ranges/pat1/pat2/g
  其中
  : 这是Vi的命令执行界面。
  range 是命令执行范围的指定,可以使用百分号(%)表示所有行,使用点(.)表示当前行,使用美元符号($)表示最后一行。你还可以使用行号,例如10,20表示第10到20行,.,$表示当前行到最后一行,.+2,$-5表示当前行后两行直到全文的倒数第五行,等等。
  s 表示其后是一个替换命令。
  pat1 这是要查找的一个正则表达式,这篇文章中有一大堆例子。
  pat2 这是希望把匹配串变成的模式的正则表达式,这篇文章中有一大堆例子。
  g 可选标志,带这个标志表示替换将针对行中每个匹配的串进行,否则则只替换行中第一个匹配串。
[编辑本段]三、常用的正则表达式
  常用的正则表达式主要有以下几种:
  匹配中文字符的正则表达式: [\u4e00-\u9fa5]
  评注:匹配中文还真是个头疼的事,有了这个表达式就好办了哦
  获取日期正则表达式:\d{4}[年|\-|\.]\d{1,2}[月|\-|\.]\d{1,2}日?
  评注:可用来匹配大多数年月日信息。
  匹配双字节字符(包括汉字在内):[^\x00-\xff]
  评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)
  匹配空白行的正则表达式:\n\s*\r
  评注:可以用来删除空白行
  匹配HTML标记的正则表达式:<(\S*?)[^>]*>.*?</>|<.*? />
  评注:网上流传的版本太糟糕,上面这个也仅仅能匹配部分,对于复杂的嵌套标记依旧无能为力
  匹配首尾空白字符的正则表达式:^\s*|\s*$
  评注:可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式
  匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
  评注:表单验证时很实用
  匹配网址URL的正则表达式:[a-zA-z]+://[^\s]*
  评注:网上流传的版本功能很有限,上面这个基本可以满足需求
  匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
  评注:表单验证时很实用
  匹配国内电话号码:\d{4}-\d{7}|\d{3}-\d{8}
  评注:匹配形式如 0511-4405222 或 021-87888822
  匹配腾讯QQ号:[1-9][0-9]\{4,\}
  评注:腾讯QQ号从10000开始
  匹配中国邮政编码:[1-9]\d(?!\d)
  评注:中国邮政编码为6位数字
  匹配身份证:\d{17}[\d|X]|\d{15}
  评注:中国的身份证为15位或18位
  匹配ip地址:((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)。
  评注:提取ip地址时有用
  匹配特定数字:
  ^[1-9]\d*$ //匹配正整数
  ^-[1-9]\d*$ //匹配负整数
  ^-?[1-9]\d*$ //匹配整数
  ^[1-9]\d*|0$ //匹配非负整数(正整数 + 0)
  ^-[1-9]\d*|0$ //匹配非正整数(负整数 + 0)
  ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ //匹配正浮点数
  ^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ //匹配负浮点数
  ^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$ //匹配浮点数
  ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$ //匹配非负浮点数(正浮点数 + 0)
  ^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$ //匹配非正浮点数(负浮点数 + 0)
  评注:处理大量数据时有用,具体应用时注意修正
  匹配特定字符串:
  ^[A-Za-z]+$ //匹配由26个英文字母组成的字符串
  ^[A-Z]+$ //匹配由26个英文字母的大写组成的字符串
  ^[a-z]+$ //匹配由26个英文字母的小写组成的字符串
  ^[A-Za-z0-9]+$ //匹配由数字和26个英文字母组成的字符串
  ^\w+$ //匹配由数字、26个英文字母或者下划线组成的字符串
  评注:最基本也是最常用的一些表达式
  Function IsRegu(Regu,s)
  '正则表达式校验
  If Regu="" Then
  Exit Function
  End if
  Dim Re,Sre
  Set Re = New RegExp
  Re.Pattern = Regu
  Sre = Re.Test(s)
  If Sre = True Then
  IsRegu = True
  Else
  IsRegu = False
  End If
  End Function
  tmp="hao123@163.com"
  if (IsRegu("\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*",tmp )) =false then
  msgbox "E-mail地址不合法 !"
  FieldCheck#N=false
  end if
  不同的语言(如PHP和JAVA)、相同语言的不同类库(如来自Sun的Java Regular Expression类库跟Apache Jakarta的正则表达式类库)间,用法会有所差别,在使用的时候,要注意这些差别。
[编辑本段]四、Editplus等软件中正则替换技巧
  正则表达式类
  【1】 正则表达式应用——替换指定内容到行尾
  【2】 正则表达式应用——数字替换----------------------------Microshaoft@CCF,jiuk2k@CCF
  【3】 正则表达式应用——删除每一行行尾的指定字符
  【4】 正则表达式应用——替换带有半角括号的多行
  【5】 正则表达式应用——删除空行----------------------------江德华
  软件技巧类
  ------------------------------------------------------
  【6】 软件技巧——键盘记录的注意事项
  【7】 软件技巧——关闭文档标签的便捷方法
  【8】 软件技巧——如何去掉 EditPlus 保存文本文件时的添加后缀提示?
  【9】 软件技巧——提示找不到语法文件的解决办法
  【10】软件技巧——设置editplus支持其它文字,如韩文----------jackywu1978@LJF
  【11】软件技巧——FTP 上传的设置----------------------------李应文2.11汉化版
  【12】软件技巧——如何禁用备份文件功能?
  【13】软件技巧——添加语法文件、自动完成文件、以及剪辑库文件
  工具集成类
  ------------------------------------------------------
  【14】工具集成——编译器集成例子(Java、Borland C++、Visual C++、Inno Setup、nsis、C#)
  【15】工具集成——让Editplus调试PHP程序----------------------avenger,aukw@CCF
  【16】工具集成——打造 PHP 调试环境(二)----------------------老七2.11汉化版
  【17】在 WINPE 中集成 EDITPLUS
  后续添加
hfzsjz 2010-02-27
  • 打赏
  • 举报
回复
就是Regex myRegex = new Regex括号里面怎么设置来采集.
波导终结者 2010-02-27
  • 打赏
  • 举报
回复
这跟设置有什么关系
中文名: 正则表达式经典实例 原名: Regular Expression Cookbook 作者: (美)高瓦特斯(Goyvaerts,J.) (美)利维森(Levithan,S.)译者: 郭耀 资源格式: PDF 版本: 扫描版 出版社: 人民邮电出版社书号: 9787115228321发行时间: 2010年06月01日 地区: 大陆 语言: 简体中文 简介: 编辑推荐 每个程序员都会遇到需要使用正则表达式的情况,但是要用好正则表达式却并不容易。本书提供了100多个实例,以帮助读者使用正则表达式处理数据和文本。即使有经验的用户也经常会遇到性能不佳、误报、漏报等让人挠头的错误,本书对于如何使用正则表达式来解决一些常见的问题给出了按部就班的解决方案,其中包括c#、Java、JavaScript、Perl、PHP、Python、Ruby和VB.NET的实例。   本书主要包括以下内容:   通过一个精练的教程理解正则表达式的基本原理和技巧;   在不同的编程语言和脚本语言中有效使用正则表达式;   学习如何对输入进行合法性检查和格式化;   处理单词、文本行、特殊字符和数值;   学习如何在URL、路径、标记语言和数据交换中使用正则   表达式;   学习更高深的正则表达式特性中的微妙之处;   理解在不同语言中正则表达式的APl、语法和行为之间的   区别;   创建更好的正则表达式来满足个性化的需求。 内容简介 本书讲解了基于8种常用的编程语言使用正则表达式的经典实例。书中提供了上百种可以在实战中使用的实例,以帮助读者使用正则表达式来处理数据和文本。对于如何使用正则表达式来解决性能不佳、误报、漏报等常见的错误以及完成一些常见的任务,本书给出了涉及基于C#、Java、JavaScript、Perl、PHP、Python、Ruby和VB.NET等编程语言的解决方案。   本书的读者对象是对正则表达式感兴趣的软件开发人员和系统管理员。本书旨在教会读者很多新的技巧以及如何避免语言特定的陷阱,读者可以通过本书提供的实例解决方案库来解决实践中的复杂问题。 作者简介 Jan Goyvaerts领导着Just Great Software公司,他在这个公司设计和开发了一些最流行的正则表达式软件。他的产品中包括RegexBuddy,世界上唯一可以模拟l5种正则表达式流派特性的正则表达式编辑器,以及PowerGREP,Microsoft Windows平台上功能最强大的9rep工具。 目录: 第1章 正则表达式简介 1.1 正则表达式的定义 1.2 使用正则表达式的工具 第2章 正则表达式的基本技巧 2.1 匹配字面文本 2.2 匹配不可打印字符 2.3 匹配多个字符之一 2.4 匹配任意字符 2.5 匹配文本行起始和/或文本行结尾 2.6 匹配整个单词 2.7 Unicode代码点、属性、区块和脚本 2.8 匹配多个选择分支之一 2.9 分组和捕获匹配中的子串 2.10 再次匹配先前匹配的文本 2.11 捕获和命名匹配子串 2.12 把正则表达式的一部分重复多次 2.13 选择最小和最大重复次数 2.14 消除不必要的回溯 2.15 避免重复逃逸 2.16 检查一个匹配,但不添加到整体匹配中 2.17 根据条件匹配两者之一 2.18 向正则表达式中添加注释 2.19 在替代文本中添加字面文本 2.20 在替代文本中添加正则匹配 2.21 把部分的正则匹配添加到替代文本中 2.22 把匹配上下文插入到替代文本中 第3章 使用正则表达式编程 3.1 在源代码中使用字面正则表达式 3.2 导入正则表达式函数库 3.3 创建正则表达式对象 3.4 设置正则表达式选项 3.5 检查是否可以在目标字符串中找到匹配 3.6 检查正则表达式能否整个匹配目标字符串 3.7 获取匹配文本 3.8 决定匹配的位置和长度 3.9 获取匹配文本的一部分 3.10 获取所有匹配的列表 3.11 遍历所有匹配 3.12 在过程代码中对匹配结果进行验证 3.13 在另一个匹配中查找匹配 3.14 替换所有匹配 3.15 使用匹配的子串来替换匹配 3.16 使用代码中生成的替代文本来替换匹配 3.17 替换另一个正则式匹配中的所有匹配 3.18 替换另一个正则式匹配之间的所有匹配 3.19 拆分字符串 3.20 拆分字符串,保留正则匹配 3.21 逐行查找 第4章 合法性验证和格式化 4.1 E-mail地址的合法性验证 4.2 北美电话号码的合法性验证和格式化 4.3 国际电话号码的合法性验证 4.4 传统日期格式的合法性验证 4.5 对传统日期格式进行精确的合法性验证 4.6 传统时间格式的合法性验证 4.7 检查ISO 8601格式的日期和时间 4.8 限制输入只能为字母数字字符 4.9 限制文本长度 4.10 限制文本中的行数 4.11 肯定响应的检查 4.12 社会安全号码的合法性验证 4.13 ISBN的合法性验证 4.14 ZIP代码的合法性验证 4.15 加拿大邮政编码的合法性验证 4.16 英国邮政编码的合法性验证 4.17 查找使用邮局信箱的地址 4.18 转换姓名格式 4.19 信用卡号码的合法性验证 4.20 欧盟增值税代码 第5章 单词、文本行和特殊字符 5.1 查找一个特定单词 5.2 查找多个单词之一 5.3 查找相似单词 5.4 查找除某个单词之外的任意单词 5.5 查找后面不跟着某个特定单词的任意单词 5.6 查找不跟在某个特定单词之后的任意单词 5.7 查找临近单词 5.8 查找重复单词 5.9 删除重复的文本行 5.10 匹配包含某个单词的整行内容 5.11 匹配不包含某个单词的整行 5.12 删除前导和拖尾的空格 5.13 把重复的空白替换为单个空格 5.14 对正则表达式元字符进行转义 第6章 数字 6.1 整数 6.2 十六进制数字 6.3 二进制数 6.4 删除前导 6.5 位于某个特定范围之内的整数 6.6 在某个特定范围之内的十六进制数 6.7 浮点数 6.8 含有千位分隔符的数 6.9 罗马数字 第7章 URL、路径和Internet地址 7.1 URL合法性验证 7.2 在全文中查找URL 7.3 在全文中查找加引号的URL 7.4 在全文中寻找加括号的URL 7.5 把URL转变为链接 7.6 URN合法性验证 7.7 通用URL的合法性验证 7.8 从URL中提取通信协议方案 7.9 从URL中抽取用户名 7.10 从URL中抽取主机名 7.11 从URL中抽取端口号 7.12 从URL中抽取路径 7.13 从URL中抽取查询 7.14 从URL中抽取片段 7.15 域名合法性验证 7.16 匹配IPv4地址 7.17 匹配IPv6地址 7.18 Windows路径的合法性验证 7.19 分解Windows路径 7.20 从Windows路径中抽取盘符 7.21 从UNC路径中抽取服务器和共享名 7.22 从Windows路径中抽取文件夹 7.23 从Windows路径中抽取文件名 7.24 从Windows路径中抽取文件扩展名 7.25 去除文件名中的非法字符 第8章 标记语言和数据交换 8.1 查找XML风格的标签 8.2 把标签b替换为strong 8.3 删掉除em和strong之外的所有XML风格标签 8.4 匹配XML名称 8.5 添加p和br标签将纯文本转换为HTML 8.6 在XML风格的标签中查找某个特定属性 8.7 向不包含cellspacing属性的 table标签中添加该属性 8.8 删除XML风格的注释 8.9 在XML风格的注释中查找单词 8.10 替换在CSV文件中使用的分隔符 8.11 抽取某个特定列中的CSV域 8.12 匹配INI段头 8.13 匹配INI段块 8.14 匹配INI名称-值对

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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