import re
regex = re.compile(r"/\*/?(\n|[^/]|[^*]/)*\*/")
test_str = ("/*********************\n"
" * test\n"
" * multiline\n"
" */\n\n"
"/* next表示を半透明でなくする (カクつき防止のテスト) */\n"
"#content-tips-wrap {\n"
" opacity: 1!important;\n"
"}\n\n\n"
"/* path /_ct/* */\n\n"
"/* なるほどねー */\n\n"
"/***** compact footer ****/\n"
"@import url('/static/dinoportal/custom/content-compactfooter.css');\n\n"
"/***** Read All *****/\n"
"@import url('/static/dinoportal/custom/content-addmore.css');\n"
"@requirejs: url('/static/dinoportal/custom/content-addmore.js');\n\n"
"/* endpath */\n\n"
"/* ヘッダメニューを常にモバイルと同じにする */\n"
"@import url('/static/dinoportal/custom/header-menu-always-mobile.css');\n\n"
"/* メニューフィードの写真・カードの先頭を大きく */\n"
"@import url('/static/dinoportal/custom/menufeed-big-leading.css');\n\n"
"/* 写真・カードのフィードをモバイルで2列表示 */\n"
"@import url('/static/dinoportal/custom/feed-card-mobile-2cols.css');\n\n"
"/* サイドバーを左に */\n"
"@import url('/static/dinoportal/custom/sidebar-left.css');\n\n"
"/* サイドバーの要素をブロック分け */\n"
"@import url('/static/dinoportal/custom/sidebar-separate.css');\n\n"
"/* コンテンツカバー画像をぼかす */\n"
"/* @import url('/static/dinoportal/custom/content-cover-blur.css'); */\n\n"
"/* 各種色設定 (LESS記法) */\n"
"@import url('/static/dinoportal/custom/colors.less');\n"
"/* ベース */\n"
"@colors-base: hsl(207, 40%, 15%); /* 文字 */\n"
"@colors-base-bg: white; /* 背景 */\n"
"/* 箱囲み要素 */\n"
"@colors-base-box: @colors-base; /* 文字 */\n"
"@colors-base-box-bg: fade(@colors-base, 12%); /* 背景 */\n"
"/* ヘッダ */\n"
"@colors-header: #eee; /* 文字 */\n"
"@colors-header-bg: black; /* 背景 */\n"
"@colors-header-shadow: black; /* ヘッダ下線 */\n"
"/* ヘッダメニュー */\n"
"@colors-header-menu: @colors-header; /* 文字 */\n"
"@colors-header-menu-bg: @colors-header-bg; /* 背景 */\n"
"/* ヘッダメニュー(選択中メニュー) */\n"
"@colors-header-menu-active: white; /* 文字 */\n"
"@colors-header-menu-active-bg: transparent; /* 背景 */\n"
"@colors-header-menu-active-mark: hsl(0,100%,35%); /* 下線 */\n"
"/* ウィジェット */\n"
"@colors-widget: @colors-base-box; /* 文字 */\n"
"@colors-widget-bg: @colors-base-box-bg; /* 背景 */\n"
"/* タイトル系 */\n"
"@colors-menufeed-title: black; /* メニューフィードのブロックタイトル */\n"
"@colors-contents-title: @colors-base; /* フィードのコンテンツタイトル */\n"
"/* 写真・カード型フィード */\n"
"@colors-cards-bg: #eee; /* 写真・カード型フィードの背景 */\n"
"/* コンテンツ */\n"
"@colors-content-heading: @colors-base; /* 見出し */\n"
"@colors-content-heading-decoration: @colors-base; /* 見出し装飾色 */\n"
"@colors-content-subheading: @colors-base; /* 小見出し */\n"
"@colors-content-subheading-decoration: @colors-base; /* 小見出し装飾色 */\n"
"@colors-content-body-link: @colors-base; /* コンテンツ内リンク */\n"
"@colors-content-body-link-active: @colors-base; /* コンテンツ内リンク(アクティブ/ホバー) */\n"
"@colors-content-quote: @colors-base-box; /* 引用ボックス(文字) */\n"
"@colors-content-quote-bg: @colors-base-box-bg; /* 引用ボックス(背景) */\n"
"@colors-content-box: @colors-base-box; /* 箱囲み段落(文字) */\n"
"@colors-content-box-bg: @colors-base-box-bg; /* 箱囲み段落(背景) */\n\n\n"
"/* モバイルでメニューフィードサイドバーの.widget要素を最下部にまとめる */\n"
"/* @adjustwidgets: ~`window._adjustwidgets = {start:10000, step:0}`; */\n\n\n"
"/* モバイル、メニューフィード、通常リスト型表示の後続要素のタイトルをボールドに */\n"
"@media (max-width:767px) {\n"
" #newsfeed .newsfeed-block.newsfeed-all-display-type-list .wfcontent.not-has-display-type .content-title {\n"
" font-weight:bold;\n"
" font-size:110%;\n"
" }\n"
"}\n\n"
"/* 記事小見出し */\n"
".article > h3 {\n"
" border:1px solid hsl(171, 80%, 45%);\n"
" padding:.4em .5em .3em 1.5em;\n"
" position:relative;\n"
"}\n"
".article > h3:before {\n"
" content:'';\n"
" position:absolute;\n"
" top:.4em;\n"
" left:.4em;\n"
" bottom:.4em;\n"
" width:.75em;\n"
" background:hsl(171, 80%, 45%);\n"
"}\n\n"
".article > h4 {\n"
" font-size:100%;\n"
" border-left:.2em solid hsl(171, 80%, 45%);\n"
" padding-left:.4em;\n"
"}\n\n"
"/****** banners-2col debug *******/\n"
".banners-2col { position:relative; }\n"
".banners-2col > a > img {\n"
" display:block;\n"
" width:100%;\n"
" margin:0;\n"
" padding:0;\n"
"}\n"
".banners-2col > a {\n"
" margin:0; padding:0;\n"
" display:inline-block;\n"
" position:relative;\n"
" width:49%;\n"
" width:-webkit-calc( 50% - 2px );\n"
" width:calc( 50% - 2px );\n"
" width:~\"calc( 50% - 2px )\"; /* for LESS */\n"
" display:inline-block;\n"
" vertical-align:top;\n"
"}\n"
".banners-2col > a:hover {\n"
" text-decoration:none;\n"
"}\n"
".banners-2col > a:nth-child(2n+1) {\n"
" margin-right:2%;\n"
" margin-right:4px;\n"
"}\n"
".banners-2col > a:nth-child(n+3) {\n"
" margin-top:4px;\n"
"}")
matches = regex.finditer(test_str)
for match_num, match in enumerate(matches, start=1):
print(f"Match {match_num} was found at {match.start()}-{match.end()}: {match.group()}")
for group_num, group in enumerate(match.groups(), start=1):
print(f"Group {group_num} found at {match.start(group_num)}-{match.end(group_num)}: {group}")
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Python, please visit: https://docs.python.org/3/library/re.html